一、修改表
create table t1(id int,name char); alter table t1 rename tt1; # 修改字段 alter table t1 modify id tinyint; alter table t1 change id ID tinyint; alter table t1 change id ID tinyint,change name NAME char(4); # 增加字段 alter table t1 add gender char(4); alter table t1 add gender char(4) first; alter table t1 add level int after ID; # 刪除字段 alter table t1 drop gender; # 復制表 create table t2 select user,host,password from mysql.user; # 只復制表結構 create table t3 select user,host,password from mysql.user where 1!=1;
二、表字段的類型
# 1、=====================表字段類型之整型======================= 強調:整型的寬度是顯示寬度,無需設置,存儲寬度是固定死的 mysql> create table t5(id tinyint) mysql> desc t4; +-------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------------+------+-----+---------+-------+ | id | tinyint(4) | YES | | NULL | | +-------+------------+------+-----+---------+-------+ 1 row in set (0.01 sec) mysql> insert t4 values(128); ERROR 1264 (22003): Out of range value for column 'id' at row 1 mysql> mysql> mysql> insert t4 values(127); Query OK, 1 row affected (0.05 sec) mysql> select * from t4; +------+ | id | +------+ | 127 | +------+ 1 row in set (0.00 sec) mysql> # 2、=====================表字段類型之浮點類型======================= create table t7(x float(255,30),y double(255,30),z decimal(65,30)); insert t7 values (1.111111111111111111111111111111,1.111111111111111111111111111111,1.111111111111111111111111111111); # 3、=====================表字段類型之日期類型====================== year(1901/2155) time 時:分:秒 ('-838:59:59'/'838:59:59') date 年:月:日 (1000-01-01/9999-12-31) datetime 年:月:日 時:分:秒 1000-01-01 00:00:00/9999-12-31 23:59:59 timestamp 年:月:日 時:分:秒 1970-01-01 00:00:00/2037 create table t8(y year,t time,d date,dt datetime,ts timestamp); insert t8 values(now(),now(),now(),now(),now()); create table student( id int, name char(10), born_year year, bitrh date, reg_time datetime ); insert student values (1,"wangjing","1911","1911-11-11","1911-11-11 11:11:11"), (2,"lxx","1988","1988-11-11","1988-11-11 11:11:11"); insert student values (3,"wangjing","1911","19111111","19111111111111"); # 注意:timestamp應該勇於記錄更新時間 create table t9( id int, name varchar(16), -- update_time datetime not null default now() on update now(), update_time timestamp, reg_time datetime not null default now() ); insert into t9(id,name) values(1,"egon"); # 測試效果 mysql> select * from t9; +------+------+---------------------+---------------------+ | id | name | update_time | reg_time | +------+------+---------------------+---------------------+ | 1 | egon | 2020-09-01 16:45:51 | 2020-09-01 16:45:51 | +------+------+---------------------+---------------------+ 1 row in set (0.00 sec) mysql> update t9 set name="EGON" where id=1; Query OK, 1 row affected (0.06 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from t9; +------+------+---------------------+---------------------+ | id | name | update_time | reg_time | +------+------+---------------------+---------------------+ | 1 | EGON | 2020-09-01 16:46:50 | 2020-09-01 16:45:51 | +------+------+---------------------+---------------------+ 1 row in set (0.00 sec) mysql> # 4、=====================表字段類型之字符類型====================== char 定長,不夠則補全空格 看起來特點: 浪費空間 讀取速度快 varchar 變長,預留1-2bytes來存儲真實數據的長度 看起來特點: 節省空間 讀取速度慢 ps:在存儲的數據量剛好達到存儲寬度限制時,其實varchar更費空間 總結:大多數情況下存儲的數據量都達不到寬度限制,所以大多數情況下varchar更省空間 但省空間不是關鍵,關鍵是省空間 會帶來io效率的提升,進而提升了查詢效率 ab |abc |abcd | 1bytes+ab|1bytes+abc|1bytes+abcd| ===============驗證 create table t11(x char(5)); create table t12(x varchar(5)); insert t11 values("我擦嘞 "); -- "我擦嘞 " insert t12 values("我擦嘞 "); -- "我擦嘞 " t11=>字符個數 5 字節個數 11 t12=>字符個數 4 字節個數 10 set sql_mode="pad_char_to_full_length"; select char_length(x) from t11; select char_length(x) from t12; select length(x) from t11; select length(x) from t12; # 5、=====================表字段類型之枚舉類型與集合====================== 枚舉類型enum("a","b","c","d") 多選1 集合類型set("a","b","c","d") 多選 CREATE TABLE shirts ( name VARCHAR(40), size ENUM('x-small', 'small', 'medium', 'large', 'x-large') ); INSERT INTO shirts(name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small'); CREATE TABLE user ( name VARCHAR(16), hobbies set("read","chou","drink","tang") ); insert user values("lxx","tang,chou"); insert user values("hxx","tangchou");
三、約束條件
四、
五、
---43---