分享知識-快樂自己:MySQL中的約束,新增約束,刪除約束,以及一些其他修飾
建立資料庫:
CREATE DATABASES 資料庫名;
選擇資料庫:
USE 資料庫名;
刪除資料庫:
DROP DATAVBASE 資料庫名;
建立表:
CREATE TABLE IF NOT NULL EXISTS 表名 (欄位1 資料型別 【欄位屬性|約束|索引|註釋】,
.............);
欄位的約束及屬性
CREATE TABLE IF NOT NULL 表名(欄位1 資料型別 PRIMARY KEY //單欄位主鍵);
多欄位聯合主鍵:
CREATE TABLE IF NOT NULL 表名
( 欄位1 資料型別 ,
欄位2 資料型別
PRIMARY KEY (欄位1,欄位2) //多聯合複合主鍵
);
註釋:
CREATE TABLE TEXT ( `id` int(11) UNSIGNED COMMENT'編號')COMMENT'測試表';
編碼格式設定:
CREATE TABLE TEXT( `id` int(11) UNSIGNED COMMENT'編號')CHARSET=字符集名;
查看錶:
SHOW TABLES;
查看錶定義:
DESCRIBE 表名;或 DESC 表名;
如果是在DOC視窗下執行,最好先執行 SET NAMES gbk;避免產生亂碼
刪除表:
DROP TABLE IF EXISTS 表名;
檢視預設儲存引擎:
SHOW VARIABLES LIKE `storage_engine%`;
指定表的儲存引擎:
CREATE TANLE 表名(#省略程式碼)ENGINE=儲存引擎;
常用引擎:InnoDB 和 MyISAM
安裝板MySQL5.5預設儲存引擎是InnoDB
常用修改語法:
#修改表名:
ALTER TABLE 舊錶明 RENAME [TO] 新表明; TO:可選項
#新增欄位:
ALTER TABLE 表名 ADD 欄位名 資料型別 [屬性]; 屬性:可選項
#修改欄位:
ALTER TABLE 表名 CHANGE 原欄位名 新欄位名 資料型別 [屬性];
#刪除欄位:
ALTER TABLE 表名 DROP 欄位名;
mysql中replace函式直接替換mysql資料庫中某欄位中的特定字串:
UPDATE `ts_weibo` SET
`weibo_id` = replace (`weibo_id`,'19782687','14204277'),
`uid` = replace (`uid`,'19782687','14204277'
.....
WHERE
`weibo_id` LIKE '%19782687%' or
`uid` LIKE '%19782687%'
非空約束(NOT NULL):新增非空約束
1)建表時直接新增
CREATE TABLE t_user(user_id INT(10) NOT NULL);
2)通過ALTER 語句
ALTER TABLE t_user MODIFY user_id INT(10) NOT NULL;
ALTER TABLE t_user CHANGE user_id user_id INT(10) NOT NULL;
刪除非空約束
1):ALTER TABLE t_user MODIFY user_id INT(10);
2):ALTER TABLE t_user CHANGE user_id user_id INT(10);
刪除主鍵和唯一約束:在mysql中刪除主鍵需要兩步
(1):如果有auto_increment自增,先刪除之;
(2):刪除主鍵約束 primary key;
首先要刪除auto_increment語法如下:
alter table 表名 modify id int(11);
這裡用的modify,只改變資料型別,也可以用change,改變列名的同時輸入新的資料型別。
下一步就是刪除主鍵:語法如下:
alter table 表名 drop primary key;
新增唯一約束:
1)建表時直接新增
CREATE TABLE t_user(user_id INT(10) UNIQUE);
CREATE TABLE t_user(
user_id INT(10),
user_name VARCHAR(30),
CONSTRAINT UN_PHONE_EMAIL UNIQUE(user_id,user_name)#複合約束
);
CREATE TABLE t_user (user_id INT(10),UNIQUE KEY(user_id) );
通過ALTER語句新增:
ALTER TABLE t_user MODIFY user_id INT(10) UNIQUE;
ALTER TABLE t_user CHANGE user_id user_id INT(10) UNIQUE;
這裡用的modify,只改變資料型別,也可以用change,改變列名的同時輸入新的資料型別。
刪除唯一性約束:
ALTER TABLE t_user DROP INDEX user_id;//指定要刪除的欄位名稱
ALTER TABLE `a` DROP INDEX UN_Name ;//指定要刪除的索引名稱
注:唯一但是可以為空(空和空不相等)
PRIMARY KEY(主鍵約束):
1)建表時直接新增
CREATE TABLE text(`user_id` INT(10) PRIMARY KEY);
CREATE TABLE `text`
(`user_id` INT(10),
user_name` VARCHAR(30),
CONSTRAINT PK_ID_NAME PRIMARY KEY(user_id,user_name)#複合約束
);
CREATE TABLE `text`
(`user_id` INT(10),
PRIMARY KEY(user_id)
);
通過ALTER語句新增:
ALTER TABLE t_user MODIFY user_id INT(10) PRIMARY KEY;
ALTER TABLE t_user CHANGE user_id user_id INT(10) PRIMARY KEY;
ALTER TABLE t_user ADD PRIMARY KEY(user_id);
ALTER TABLE t_user ADD CONSTRAINT PK_ID PRIMARY KEY(user_id);
這裡用的modify,只改變資料型別,也可以用change,改變列名的同時輸入新的資料型別。
ALTER TABLE text ADD CONSTRAINT pk_textId PRIMARY KEY `text`(`textId`);
刪除主鍵約束:
ALTER TABLE `text` DROP PRIMARY KEY
FOREIGN KEY(外來鍵約束):
首先建立兩張表:A,B
從表A
CREATE TABLE `A`
(
`textId` INT PRIMARY KEY,
`textId1` INT(30),
`textName` NVARCHAR(30)
CONSTRAINT FK_A_B FOREIGN KEY(`textId1`) REFERENCES `b`(`textId1`)#新增外來鍵約束
);
主表B
CREATE TABLE `B`
(
`textId1` INT PRIMARY KEY,
`textName` NVARCHAR(30)
);
另外一種寫法:
ALTER TABLE `a` ADD CONSTRAINT fk_a_b FOREIGN KEY (`textId1`) REFERENCES `b`(`textId1`);
刪除外來鍵約束:
第一步:
ALTER TABLE `a` DROP FOREIGN KEY fk_a_b;
第二步:
DROP INDEX fk_a_b ON `a`;
注意事項: 刪除外來鍵約束的時候需要先刪除外來鍵約束,在刪除索引才可以
鍵中的級聯關係有以下幾種情況:
#ON DELETE CASCADE 刪除主表中的資料時,從表中的資料隨之刪除
#ON UPDATE CASCADE 更新主表中的資料時,從表中的資料隨之更新
#ON DELETE SET NULL 刪除主表中的資料時,從表中的資料置為空
#預設 刪除主表中的資料前需先刪除從表中的資料,否則主表資料不會被刪除
CREATE TABLE students(
stu_id INT(10) AUTO_INCREMENT PRIMARY KEY,
stu_name VARCHAR(30) NOT NULL,
stu_score FLOAT(5,2) DEFAULT 0.0,
cla_id INT(10),
CONSTRAINT FK_CLA_ID FOREIGN KEY(cla_id) REFERENCES class(cla_id) ON DELETE CASCADE
);
CREATE TABLE students(
stu_id INT(10) AUTO_INCREMENT PRIMARY KEY,
stu_name VARCHAR(30) NOT NULL,
stu_score FLOAT(5,2) DEFAULT 0.0,
cla_id INT(10),
CONSTRAINT FK_CLA_ID FOREIGN KEY(cla_id) REFERENCES class(cla_id) ON UPDATE CASCADE
);
CREATE TABLE students(
stu_id INT(10) AUTO_INCREMENT PRIMARY KEY,
stu_name VARCHAR(30) NOT NULL,
stu_score FLOAT(5,2) DEFAULT 0.0,
cla_id INT(10),
CONSTRAINT FK_CLA_ID FOREIGN KEY(cla_id) REFERENCES class(cla_id) ON DELETE SET NULL
);
注:插入資料時,先插入主表中的資料,再插入從表中的資料。刪除資料時,先刪除從表中的資料,再刪除主表中的資料
AUTO_INCREMENT(自增長):
在建立表的時候新增:
CREATE TABLE t_user(user_id INT(10) AUTO_INCREMENT PRIMARY KEY);
通過ALTER語句:
ALTER TABLE t_user MODIFY user_id INT(10) AUTO_INCREMENT;
ALTER TABLE t_user CHANGE user_id user_id INT(10) AUTO_INCREMENT;
刪除自增長:
ALTER TABLE t_user MODIFY user_id INT(10);
ALTER TABLE t_user CHANGE user_id user_id INT(10);
注意:每張表只能有一列自增列,這裡用的modify,只改變資料型別,也可以用change, 改變列名的同時輸入新的資料型別。
DEFAULT(預設屬性值) :
1)在建立表的時候新增
CREATE TABLE t_user(user_id INT(10) DEFAULT 3);
2)通過ALTER語句
ALTER TABLE t_user MODIFY user_id INT(10) DEFAULT 2;
ALTER TABLE t_user CHANGE user_id user_id INT(10) DEFAULT 2;
刪除預設約束:
ALTER TABLE t_user MODIFY user_id INT(10);
ALTER TABLE t_user CHANGE user_id user_id INT(10);
這裡用的modify,只改變資料型別,也可以用change, 改變列名的同時輸入新的資料型別。
UNSIGNED(無符號位):
1)在建立表的時候新增
CREATE TABLE t_user(user_id INT(10) UNSIGNED);
2)通過ALTER語句
ALTER TABLE t_user MODIFY user_id INT(10) UNSIGNED;
ALTER TABLE t_user CHANGE user_id user_id INT(10) UNSIGNED;
刪除無符號:
ALTER TABLE t_user MODIFY user_id INT(10);
ALTER TABLE t_user CHANGE user_id user_id INT(10);
無符號作用於數值型別
ZEROFILL(零填充):
新增零填充
1)在建立表的時候新增
CREATE TABLE t_user(user_id INT(10) ZEROFILL);
2)通過ALTER語句
ALTER TABLE t_user MODIFY user_id INT(10) ZEROFILL;
ALTER TABLE t_user CHANGE user_id user_id INT(10) ZEROFILL;
3)刪除零填充:
ALTER TABLE t_user MODIFY user_id INT(10);
ALTER TABLE t_user CHANGE user_id user_id INT(10);
注:零填充會將未將有效位以外的位用零來顯示,比如某欄位資料型別為INT(5),而插入的值為2,那麼零填充會顯示00002;但是,這個效果在Navicat for MySQL中顯示不出來,只有在DOS視窗下才能顯示