MYSQL——修改表,表字段類型及約束條件


一、修改表

 

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---


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM