1. 程式人生 > >MySQL:表的操作 知識點難點總結:表完整性約束及其他常用知識點二次總結🙄

MySQL:表的操作 知識點難點總結:表完整性約束及其他常用知識點二次總結🙄

完整性約束 null incr 復合 簡單 clas 例子 www. 允許

表操作

一 : 修改表表表表表表表表表: ALTER TABLE

語法
1. 改表名rename
    alter table 表名 
                    rename 新表名

2. 增加字段add
    alter table 表名
                    add 字段名 數據類型 (完整性約束條件)
                    add 字段名 數據類型(完整性約束條件)


3. 刪除字段 drop
    alter table 表名
                    drop 字段名;

4. 修改字段 
modify 字段名 數據類型 (完整約束條件);

change 舊字段名 新字段名 舊數據類型 (完整性約束條件);

change 舊字段名 新字段名 新數據類型(完整性約束條件);
二 : 復制表 :

復制表結構+記錄 (key不會復制: 主鍵、外鍵和索引) mysql> create table new_service select * from service;

三 : 數據類型

1. char : 定長,簡單粗暴,浪費空間,存取速度快.
   char(10) 意思就是存儲字符時,小於10個字符,會向右填充空格來滿足長度.但是檢索或者查詢時,會自動刪除尾部空格,除非你打開它.
2. vachar   : 變長,節省空間,存取速度慢
   carchar(10): 不會自動填充空格,如果‘ad  ‘尾部空格也會被存到.檢索時,你怎麽存的就怎麽顯示.
 
效率 : char > varchar > text
補充:
text : 用於保存變長的大字符串 如:878787(2**13 -1)個字符
length : 查看字節數
char_length : 查看字符數
   
tinyint(m) 1個字節 範圍(-128~127) 
smallint(m) 2個字節 範圍(-32768~32767) 
mediumint(m) 3個字節 範圍(-8388608~8388607) 
int(m) 4個字節 範圍(-2147483648~2147483647) 
bigint(m) 8個字節 範圍(+-9.22*10的18次方)
四 : 枚舉類型(enum)和集合類型(set)

  1. enum 單選 只能在給定的範圍內選擇,如單選框,多選框.
  2. set 多選 只能在給定的範圍內炫則一個或多個值(愛好1,愛好2,愛好3..)
: 完整性約束 重點重點重點!!!!!

作用:用於保證數據的完整性和一致性.

  1. not null 和 defult
  2. unique : 唯一
  3. primary key : 主鍵
  4. auto_increment : 自增長
  5. foreign key : 外鍵

1. 如果字段不允許為空,就必須寫上 not null.

例子: sex enum(‘male‘,‘female‘) not null default ‘male‘; ###enum: 性別要從後面給出的條件中挑選出一個,且不能為空,如果不填的話,默認值就是 ‘male‘.

註意:not null 和 ‘‘  不一樣!

2. unique: 設置唯一約束

2.1 unique 和 not null 碰到一起的話,desc 改表結構的話,會看到該字段的 key 會是 primary.

2.2 聯合唯一:

create table service(
id int primary key auto_increment,
name varchar(20),
host varchar(15) not null,
port int not null,
unique(host,port) #聯合唯一
);

mysql> insert into service values
    -> (1,‘nginx‘,‘192.168.0.10‘,80),
    -> (2,‘haproxy‘,‘192.168.0.20‘,80),
    -> (3,‘mysql‘,‘192.168.0.30‘,3306)
    -> ;
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into service(name,host,port) values(‘nginx‘,‘192.168.0.10‘,80);
ERROR 1062 (23000): Duplicate entry ‘192.168.0.10-80‘ for key ‘host‘

3. primary key : 設置主鍵

單列做主鍵

多列做主鍵(復合主鍵)

註意! 一個表內只能有一個主鍵 primary key

單列主鍵我們就不舉例了,
多列做主鍵
create table service(
ip varchar(15),
port char(5),
service_name varchar(10) not null,
primary key(ip,port)
);

4. auto_increment : 自增長

約束字段為自增長,被約束的字段必須同時被 key鍵約束.

4.1 在創建表的時候設置初始值 auto_increment = 3 ;

或者是創建表時不設置,然後在創建完後修改它 : alter table 表名 auto_incretment = 3 ;

對於自增的字段,在用 delete 刪除後,再插入值,該字段扔按照刪除前的位置繼續增長.

應該用 truncate 清空表,比起 delete 一條一條的刪除, truncate 會方便很多,在刪除大表時用 truncate.

4.2 自增步長:auth_increment_increment

設置步這裏面涉及三個問題:
1. 級別:
#基於表級別
create table t1(
    id int。。。
)engine=innodb,auto_increment=2 步長=2 default charset=utf8

#mysql自增的步長:
    show session variables like ‘auto_inc%‘;

#基於會話級別 set session
set session auth_increment_increment=2 #修改會話級別的步長

#基於全局級別的 set global
set global auth_increment_increment=2 #修改全局級別的步長(所有會話都生效)




2.步長和起始偏移量 : auto_increment_increment and auto_increment_offset

~~偏移量 : offset
WARNING:::::
If the value of auto_increment_offset dayu auto_increment_increment ,the value of offset is ignored(被忽略).
翻譯:如果 偏移量的值大於步長的值的話,那麽偏移量的值將被忽略. 如果 OFFSET > INCREMENT.

Example: 設置 auto_increment_increment = 3 , auto_increment_offset = 4 . 這種情況的話, offset 的值還是初始值,不會變成4.

5. foreign key

這個知識點,我另寫了一篇,大多是習題.通過實例理解這個外鍵,多思考...

http://www.cnblogs.com/ugfly/p/7487990.html 直接拉到最底那部分.

MySQL:表的操作 知識點難點總結:表完整性約束及其他常用知識點二次總結🙄