MYSQL建表操作大全
建表語句
通用模板
簡易版
DROP TABLE IF EXISTS `user_tb`; # 刪除原表,IF EXISTS :防止報錯CREATE TABLE t1(`id` varchar(50) not null,`name` varchar(20));帶主鍵版本
DROP TABLE IF EXISTS `user_tb`; # 刪除原表,IF EXISTS :防止報錯CREATE TABLE `user_tb`(# primary key : 標注主鍵 - 主鍵唯一`id` varchar(50) not null primary key, `name` varchar(20) );帶主鍵版本 - 復合主鍵
DROP TABLE IF EXISTS `user_tb`; # 刪除原表,IF EXISTS :防止報錯CREATE TABLE `user_tb`(`id` varchar(50) not null , `name` varchar(20), primary key (`id`,`name`));說明:
-
1、所謂的復合主鍵,就是指你表的主鍵含有一個以上的字段組成 。
-
2、上面的name和id字段組合起來就是你user_tb表的復合主鍵
-
3、它的出現是因為你的name字段可能會出現重名,所以要加上ID字段這樣就可以保證你記錄的唯一性
一般情況下,主鍵的字段長度和字段數目要越少越好
-
4、一般在一個主鍵不能唯一標識這個表中的記錄的時候才使用復合主鍵
- 比如商品SPU相等的時候
- 可能SPU1下有code為0010的SKU,SPU2下也有code為0010的SKU
- 這種情況下,就無法單純依靠SPU來保證此條記錄的唯一性
- 所以就靠這樣的聯合主鍵來確定這條記錄的唯一性
帶默認值
DROP TABLE IF EXISTS `user_tb`; # 刪除原表,IF EXISTS :防止報錯 CREATE TABLE `user_tb`(`id` varchar(50) not null primary key, `name` varchar(20), `is_validity` char(1) default '1' COMMENT '是否有效 1 :有效 0:無效') COMMENT='帶默認值的測試表';說明:
-
1、char(1) :只存儲 1 0 用這個節省空間
-
2、COMMENT:為備注值
帶默認值 - 主鍵自增、字段備注
DROP TABLE IF EXISTS `user_tb`; # 刪除原表,IF EXISTS :防止報錯 CREATE TABLE `user_tb`(`id` int(11) not null AUTO_INCREMENT comment 'id' , `name` varchar(20) comment '名字', `is_validity` char(1) default '1' COMMENT '是否有效 1 :有效 0:無效',primary key(`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='帶默認值的測試表';說明:
- 主鍵格式需要可加格式,才可以自增,這里的int 是可以的
完整模板
DROP TABLE IF EXISTS `user_tb`; # 刪除原表,IF EXISTS :防止報錯 CREATE TABLE `user_tb`(`id` varchar(50) COLLATE utf8_bin NOT NULL comment 'id', `custimer_name` varchar(50) COLLATE utf8_bin DEFAULT NULL comment '客戶名字', `order_code` bigint(20) COLLATE utf8_bin DEFAULT NULL COMMENT '訂單CODE',`goods_code` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '商品CODE',`goods_name` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '商品名稱',`goods_market_price` decimal(18,6) DEFAULT NULL COMMENT '商品市場價錢',`goods_sell_price` decimal(18,6) DEFAULT NULL COMMENT '商品銷售價錢',`order_number` int(10) DEFAULT NULL COMMENT '訂單商品數量',`pay_fee` decimal(18,6) DEFAULT NULL COMMENT '付款金額',`pay_time` datetime DEFAULT NULL COMMENT '支付時間',`order_type` varchar(5) COLLATE utf8_bin DEFAULT NULL COMMENT '(訂單類型 10:實物商品 20:虛擬商品 30:其他商品)',`order_status` varchar(5) COLLATE utf8_bin DEFAULT NULL COMMENT '(訂單狀態:10:待付款;20:已支付;30:支付失敗;40:超時未支付訂單自動關閉;',`is_validity` char(1) default '1' COMMENT '是否有效 1 :有效 0:無效',`create_code` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '創建人CODE',`create_name` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '創建人名稱',`create_date` datetime DEFAULT NULL COMMENT '創建時間',`update_code` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '修改人CODE',`update_name` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '修改人名稱',`update_date` datetime DEFAULT NULL COMMENT '修改時間',PRIMARY KEY (`id`),UNIQUE KEY `index_order_code` (`order_code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='完整測試表';注意點:
- 1、MySQL的SQL特性:表名和字段名需要加反引號引住;
- 2、decimal(18,6):類型可用于交易金額,精度更準確,double會丟失精度;
- 3、COMMENT:中文描述
- 4、ENGINE=InnoDB: 使用InnoDB引擎(聚集索引)
- 5、DEFAULT CHARSET=utf8: 選擇合適的編碼、 默認編碼集為utf-8
- 6、COLLATE utf8_bin :以二進制值比較,也就是區分大小寫,collate是核對的意思(拓展:如果是uft-8_general_ci :普通比較,不區分大小寫)
- 7、varchar(50):如果需要使用AUTO_INCREMENT id需要設置成 可加類型,比如int
索引與主鍵
- 增加索引- ALTER TABLE 庫點table_name ADD PRIMARY KEY ( `column` );- column為添加的索引字段- 查詢表中存在的索引信息- show indexes from 庫點table_name- 增加索引- ALTER TABLE 庫點table_name ADD INDEX ( `column` );- column 為添加的索引字段- 刪除索引- alter table 庫點table_name drop index `column`,add UNIQUE (`column`);- unique的作用:保證唯一修改表結構
1、修改編碼- ALTER TABLE 庫點table_name MODIFY COLUMN `column` varchar(50) - CHARACTER SET utf8 COLLATE utf8_bin NULL;2、修改注釋2.1、修改表注釋- ALTER TABLE student COMMENT '學生表';2.2、修改列注釋- ALTER TABLE student MODIFY COLUMN name VARCHAR(100) COMMENT '姓名';3、修改表中字段長度- 3.1、表中已存有數據:ALTER table 表名 MODIFY (字段名 字段類型(長度));- 3.2、表中未存有數據:ALTER TABLE 表名 MODIFY 字段名 字段類型(長度);4、添加字段- ALTER TABLE prod_fsk_statistics.calendar ADD year_ int COMMENT '年份';- ALTER TABLE prod_fsk_statistics.calendar ADD month_ int COMMENT '月份';增刪查改
1。1、插入單條-- INSERT INTO 表名 (字段1,字段2,......) VALUES (值1,值2,.....);insert into 庫點table_name (`column_1`,`column_2`)VALUES (20,'商品_name');1.2、批量插入-- INSERT INTO 表名 (字段1,字段2,......)VALUES (值1,值2,......),(值1,值 2,......),(值1,值2,......);INSERT INTO form (id,username,age)VALUES (2,"王二",22),(3,"周三",23),(4,"劉四",24),(5,"吳五",25),(6,"陸六",26);2、修改-- UPDATE 表名(修改) SET(修改哪些字段)WHERE(查詢條件)-- UPDATE 表名 SET 字段1 = 值1,字段2 = 值2,...... WHERE 字段1 = 值1;UPDATE form SET username = "張張",age = 22 WHERE id = 1;3、刪除-- 刪除語句-- DALETE FROM 表名 WHERE 字段1 = 值1DELETE FROM form WHERE username = "李四";4、查詢MySQL中utf8和utf8mb4有什么區別
-
1、MySQL在5.5.3之后增加了這個utf8mb4的編碼,mb4就是most bytes 4的意思,專門用來兼容四字節的unicode。utf8mb4是utf8的超集,除了將編碼改為utf8mb4外不需要做其他轉換。當然,為了節省空間,一般情況下使用utf8也就夠了。
-
2、內容描述
那上面說了既然utf8能夠存下大部分中文漢字,那為什么還要使用utf8mb4呢? 原來mysql支持的 utf8 編碼最大字符長度為 3 字節,如果遇到 4 字節的寬字符就會插入異常了。三個字節的 UTF-8 最大能編碼的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文種平面(BMP)。也就是說,任何不在基本多文本平面的 Unicode字符,都無法使用 Mysql 的 utf8 字符集存儲。包括 Emoji 表情(Emoji是一種特殊的 Unicode 編碼,常見于 ios 和 android 手機上),和很多不常用的漢字,以及任何新增的 Unicode 字符等等(utf8的缺點)。
通常,計算機在存儲字符時,會根據不同類型的字符以及編碼方式分配存儲空間。例如以下幾種編碼方式;
①ASCII編碼中,一個英文字母(不分大小寫)占用一個字節的空間,一個中文漢字占用兩個字節的空間。一個二進制的數字序列,在計算機中作為一個數字單元存儲時,一般為8位二進制數,換算為十進制。最小值0,最大值255。
②UTF-8編碼中,一個英文字符占用一個字節的存儲空間,一個中文(含繁體)占用三個字節的存儲空間。
③Unicode編碼中,一個英文占用兩個字節的存儲空間,一個中文(含繁體)占用兩個字節的存儲空間。
④UTF-16編碼中,一個英文字母字符或一個漢字字符存儲都需要占用2個字節的存儲空間(Unicode擴展區的一些漢字存儲需要4個字節)。
⑤UTF-32編碼中,世界上任何字符的存儲都需要占用4個字節的存儲空間。
既然utf8能兼容絕大部分的字符,為什么要擴展utf8mb4?
隨著互聯網的發展,產生了許多新類型的字符,例如emoji這種類型的符號,也就是我們通常在聊天時發的小黃臉表情,這種字符的出現不在基本多平面的Unicode字符之中,導致無法在MySQL中使用utf8存儲,MySQL于是對utf8字符進行了擴展,增加了utf8mb4這個編碼。
所以,設計數據庫時如果想要允許用戶使用特殊符號,最好使用utf8mb4編碼來存儲,使得數據庫有更好的兼容性,但是這樣設計會導致耗費更多的存儲空間。
總結
以上是生活随笔為你收集整理的MYSQL建表操作大全的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql时间戳计算_mysql根据时间
- 下一篇: linux cmake编译源码,linu