1. 程式人生 > >分享知識-快樂自己:MySQL中的約束,新增約束,刪除約束,以及一些其他修飾

分享知識-快樂自己: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視窗下才能顯示