mysql數據表的基本操作

1.創建數據表
在創建完數據庫之後,接下來我們就需要創建數據表。創建數據表是指在已經創建好的數據庫中建立新表。創
建數據表的過程是規定數據列的屬性的過程,同時也是實施數據完整性約束的過程。
2.創建表的語法形式
數據表屬於數據庫,在創建數據表之前,應該使用語句“USE <數據庫名>” 指定操作是從哪個數據庫中進行,如
果沒有選擇數據庫,會報錯

語法:
CREATE TABLE <表名> ( 字段名1, 數據類型 [列級別約束條件] [默認值], 字段名2, 數據類型 [列級
別約束條件] [默認值], ... ... ):

例如:

mysql> CREATE TABLE tb_emp1
 -> (
 -> id INT(11),
 -> name VARCHAR(25),
 -> deptId INT(11),
 -> salary FLOAT
 -> );
Query OK, 0 rows affected (0.08 sec)
mysql> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| tb_emp1 |
+----------------+
1 row in set (0.05 sec)

1.1.使用主鍵約束
主鍵約束要求主鍵列的數據唯一,並且不允許爲空。

  1. 單字段主鍵
    語法: 字段名 數據類型 PRIMARY KEY [默認值]
    例如:
    mysql> CREATE TABLE tb_emp2
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(25),
    -> deptID INT(11),
    -> salary FLOAT
    -> );
    Query OK, 0 rows affected (0.05 sec)
  2. 在定義完所有列之後指定主鍵
    語法:
    [CONSTRAINT <約束名>] PRIMARY KEY [字段名]
    例如:
    mysql> CREATE TABLE tb_emp3
    -> (
    -> id INT(11),
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT,
    -> PRIMARY KEY(id)
    -> );
    Query OK, 0 rows affected (0.01 sec)
  3. 多字段聯合主鍵
    語法:
    PRIMARY KEY [字段1,字段2,....]
    例如:
    mysql> CREATE TABLE tb_emp4
    -> (
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT,
    -> PRIMARY KEY(name,deptId)
    -> );
    Query OK, 0 rows affected (0.00 sec)

    1.2.使用外鍵約束
    外鍵用來在兩個表數據之間建立連接,它可以是一列或者多列

    語法:
    [CONSTRAINT<外鍵名>] FOREIGN KEY [字段名1,字段名2...] REFERENCES<主表名> 主鍵列1[主鍵列
    2...]
    例如:
    mysql> CREATE TABLE tb_dept1
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(22) NOT NULL,
    -> location VARCHAR(50)
    -> );
    Query OK, 0 rows affected (0.00 sec)
    mysql> CREATE TABLE tb_emp5
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT,
    -> CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
    -> );
    Query OK, 0 rows affected (0.06 sec)

    1.3. 使用非空約束
    非空約束指字段的值不能爲空。

    語法:
    字段名 數據類型 not null
    例如:
    mysql> CREATE TABLE tb_emp6
    -> (
    -> id INT(11) PRIMARY KEY ,
    -> name VARCHAR(25) NOT NULL,
    -> deptId INT(11),
    -> salary FLOAT
    -> );
    Query OK, 0 rows affected (0.06 sec)
    或者 語法:
    [CONSTRATIN <約束名>] UNIQUE (<字段名>)
    例如:
    mysql> CREATE TABLE tb_dept3
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(22),
    -> location VARCHAR(50),
    -> CONSTRAINT STH UNIQUE(name)
    -> );
    Query OK, 0 rows affected (0.00 sec)

    1.4.使用默認約束
    默認約束指定某列的默認值。

    語法:
    字段名 數據類型 DEFAULT 默認值
    例如:
    mysql> CREATE TABLE tb_emp7
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(25) NOT NULL,
    -> deptId INT(11) DEFAULT 1111,
    -> salary FLOAT,
    -> info VARCHAR(50)
    -> );
    Query OK, 0 rows affected (0.00 sec)

    1.5.設置表的屬性值自動增加

    語法:
    字段名 數據類型 AUTO_INCREMENT
    例如:
    mysql> CREATE TABLE tb_emp8
    -> (
    -> id INT(11) PRIMARY KEY AUTO_INCREMENT,
    -> name VARCHAR(25) NOT NULL,
    -> deptId INT(11),
    -> salary FLOAT
    -> );
    Query OK, 0 rows affected (0.00 sec)

    插入數據驗證:

    mysql> INSERT INTO tb_emp8(name,salary)
    -> VALUES('lucy',1000),('lura',1200),('kevin',1500);
    Query OK, 3 rows affected (0.00 sec)
    Records: 3 Duplicates: 0 Warnings: 0

    查看:

    mysql> SELECT * FROM tb_emp8;
    +----+-------+--------+--------+
    | id | name | deptId | salary |
    +----+-------+--------+--------+
    | 1 | lucy | NULL | 1000 |
    | 2 | lura | NULL | 1200 |
    | 3 | kevin | NULL | 1500 |
    +----+-------+--------+--------+
    3 rows in set (0.00 sec)

    3.查看數據表結構
    3.1. 查看錶基本結構語句DESCRIBE

    語法:
    DESCRIBE 表名; 或 DESC 表名;
    例如:
    mysql> DESCRIBE tb_dept1;
    +----------+-------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +----------+-------------+------+-----+---------+-------+
    | id | int(11) | NO | PRI | NULL | |
    | name | varchar(22) | NO | | NULL | |
    | location | varchar(50) | YES | | NULL | |
    +----------+-------------+------+-----+---------+-------+
    3 rows in set (0.00 sec)

    或者

    mysql> DESC tb_dept1;
    +----------+-------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +----------+-------------+------+-----+---------+-------+
    | id | int(11) | NO | PRI | NULL | |
    | name | varchar(22) | NO | | NULL | |
    | location | varchar(50) | YES | | NULL | |
    +----------+-------------+------+-----+---------+-------+
    3 rows in set (0.00 sec)

    3.2.查看錶詳細結構語句

    語法:
    SHOW CREATE TABLE <表名\G>
    mysql> SHOW CREATE TABLE tb_emp1\G
    *************************** 1. row ***************************
    Table: tb_emp1
    Create Table: CREATE TABLE `tb_emp1` (
    `id` int(11) DEFAULT NULL,
    `name` varchar(25) DEFAULT NULL,
    `deptId` int(11) DEFAULT NULL,
    `salary` float DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)

    3.3. 修改數據表 3.3.1 修改表名

    語法:
    ALTER TABLE <舊錶名> RENAME [TO] <新表名>.
    例如:
    mysql> SHOW TABLES;
    +----------------+
    | Tables_in_test |
    +----------------+
    | tb_dept1 |
    | tb_dept3 |
    | tb_emp1 |
    | tb_emp2 |
    | tb_emp3 |
    | tb_emp4 |
    | tb_emp5 |
    | tb_emp7 |
    | tb_emp8 |
    +----------------+
    9 rows in set (0.00 sec)
    mysql> ALTER TABLE tb_dept3 RENAME tb_deptment3;
    Query OK, 0 rows affected (0.05 sec)
    mysql> SHOW TABLES;
    +----------------+
    | Tables_in_test |
    +----------------+
    | tb_dept1 |
    | tb_deptment3 |
    | tb_emp1 |
    | tb_emp2 |
    | tb_emp3 |
    | tb_emp4 |
    | tb_emp5 |
    | tb_emp7 |
    | tb_emp8 |
    +----------------+
    9 rows in set (0.00 sec)

    3.4.修改字段的數據類型

    語法:
    ALTER TABLE <表名> MODIFY <字段名> <數據類型>
    例如:
    mysql> DESC tb_dept1;
    +----------+-------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +----------+-------------+------+-----+---------+-------+
    | id | int(11) | NO | PRI | NULL | |
    | name | varchar(22) | NO | | NULL | |
    | location | varchar(50) | YES | | NULL | |
    +----------+-------------+------+-----+---------+-------+
    3 rows in set (0.00 sec)
    mysql> ALTER TABLE tb_dept1 MODIFY name VARCHAR(30);
    Query OK, 0 rows affected (0.08 sec)
    Records: 0 Duplicates: 0 Warnings: 0
    mysql> DESC tb_dept1;
    +----------+-------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +----------+-------------+------+-----+---------+-------+
    | id | int(11) | NO | PRI | NULL | |
    | name | varchar(30) | YES | | NULL | |
    | location | varchar(50) | YES | | NULL | |
    +----------+-------------+------+-----+---------+-------+
    3 rows in set (0.00 sec)

    3. 5.修改字段名

    語法:
    ALTER TABLE <表名> CHANGE<舊字段名><新字段名> <新數據類型>
    例如:
    mysql> ALTER TABLE tb_dept1 CHANGE location loc VARCHAR(50);
    Query OK, 0 rows affected (0.10 sec)
    Records: 0 Duplicates: 0 Warnings: 0
    mysql> DESC tb_dept1;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id | int(11) | NO | PRI | NULL | |
    | name | varchar(30) | YES | | NULL | |
    | loc | varchar(50) | YES | | NULL | |
    +-------+-------------+------+-----+---------+-------+
    3 rows in set (0.00 sec)

    3.6. 添加字段

    語法:
    ALTER TABLE <表名> ADD <新字段名><數據類型> [約束條件] [FIRST|AFTER 已存在字段名]
    例如:
    mysql> DESC tb_dept1;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id | int(11) | NO | PRI | NULL | |
    | name | varchar(30) | YES | | NULL | |
    | loc | varchar(50) | YES | | NULL | |
    +-------+-------------+------+-----+---------+-------+
    3 rows in set (0.00 sec)
    mysql> ALTER TABLE tb_dept1 ADD column1 VARCHAR(12) not null;
    Query OK, 0 rows affected (0.02 sec)
    Records: 0 Duplicates: 0 Warnings: 0
    mysql> DESC tb_dept1;
    +---------+-------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +---------+-------------+------+-----+---------+-------+
    | id | int(11) | NO | PRI | NULL | |
    | name | varchar(30) | YES | | NULL | |
    | loc | varchar(50) | YES | | NULL | |
    | column1 | varchar(12) | NO | | NULL | |
    +---------+-------------+------+-----+---------+-------+
    4 rows in set (0.00 sec)

    或者

    mysql> ALTER TABLE tb_dept1 ADD column2 INT(11) FIRST;
    Query OK, 0 rows affected (0.02 sec)
    Records: 0 Duplicates: 0 Warnings: 0
    mysql> DESC tb_dept1;
    +---------+-------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +---------+-------------+------+-----+---------+-------+
    | column2 | int(11) | YES | | NULL | |
    | id | int(11) | NO | PRI | NULL | |
    | name | varchar(30) | YES | | NULL | |
    | loc | varchar(50) | YES | | NULL | |
    | column1 | varchar(12) | NO | | NULL | |
    +---------+-------------+------+-----+---------+-------+
    5 rows in set (0.00 sec)

    或者

    mysql> ALTER TABLE tb_dept1 ADD column3 INT(11) AFTER name ;
    Query OK, 0 rows affected (0.09 sec)
    Records: 0 Duplicates: 0 Warnings: 0
    mysql> DESC tb_dept1;
    +---------+-------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +---------+-------------+------+-----+---------+-------+
    | column2 | int(11) | YES | | NULL | |
    | id | int(11) | NO | PRI | NULL | |
    | name | varchar(30) | YES | | NULL | |
    | column3 | int(11) | YES | | NULL | |
    | loc | varchar(50) | YES | | NULL | |
    | column1 | varchar(12) | NO | | NULL | |
    +---------+-------------+------+-----+---------+-------+
    6 rows in set (0.00 sec)

    3.7.刪除字段

    語法:
    ALTER TABLE <表名> DROP <字段名>
    例如:
    mysql> ALTER TABLE tb_dept1 DROP column2;
    Query OK, 0 rows affected (0.03 sec)
    Records: 0 Duplicates: 0 Warnings: 0
    mysql> DESC tb_dept1;
    +---------+-------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +---------+-------------+------+-----+---------+-------+
    | id | int(11) | NO | PRI | NULL | |
    | name | varchar(30) | YES | | NULL | |
    | column3 | int(11) | YES | | NULL | |
    | loc | varchar(50) | YES | | NULL | |
    | column1 | varchar(12) | NO | | NULL | |
    +---------+-------------+------+-----+---------+-------+
    5 rows in set (0.00 sec)

    3.8.修改字段的排列位置

    語法:
    ALTER TABLE <表名> MODIFY <字段名> <數據類型> FIRST | AFTER <字段2> 例如:
    mysql> ALTER TABLE tb_dept1 MODIFY column1 VARCHAR(12) FIRST;
    Query OK, 0 rows affected (0.01 sec)
    Records: 0 Duplicates: 0 Warnings: 0
    mysql> DESC tb_dept1;
    +---------+-------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +---------+-------------+------+-----+---------+-------+
    | column1 | varchar(12) | YES | | NULL | |
    | id | int(11) | NO | PRI | NULL | |
    | name | varchar(30) | YES | | NULL | |
    | column3 | int(11) | YES | | NULL | |
    | loc | varchar(50) | YES | | NULL | |
    +---------+-------------+------+-----+---------+-------+
    5 rows in set (0.01 sec)

    或者

    mysql> ALTER TABLE tb_dept1 MODIFY column1 VARCHAR(12) AFTER loc;
    Query OK, 0 rows affected (0.06 sec)
    Records: 0 Duplicates: 0 Warnings: 0
    mysql> DESC tb_dept1;
    +---------+-------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +---------+-------------+------+-----+---------+-------+
    | id | int(11) | NO | PRI | NULL | |
    | name | varchar(30) | YES | | NULL | |
    | column3 | int(11) | YES | | NULL | |
    | loc | varchar(50) | YES | | NULL | |
    | column1 | varchar(12) | YES | | NULL | |
    +---------+-------------+------+-----+---------+-------+
    5 rows in set (0.00 sec)

    3.9.更改表的存儲引擎

    語法:
    ALTER TABLE <表名> ENGINE=<更改後的存儲引擎>
    例如:
    mysql> SHOW CREATE TABLE tb_deptment3\G
    *************************** 1. row ***************************
    Table: tb_deptment3
    Create Table: CREATE TABLE `tb_deptment3` (
    `id` int(11) NOT NULL,
    `name` varchar(22) DEFAULT NULL,
    `location` varchar(50) DEFAULT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `STH` (`name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    mysql> ALTER TABLE tb_deptment3 ENGINE=MyISAM;
    Query OK, 0 rows affected (0.03 sec)
    Records: 0 Duplicates: 0 Warnings: 0
    mysql> SHOW CREATE TABLE tb_deptment3\G
    *************************** 1. row ***************************
    Table: tb_deptment3
    Create Table: CREATE TABLE `tb_deptment3` (
    `id` int(11) NOT NULL,
    `name` varchar(22) DEFAULT NULL,
    `location` varchar(50) DEFAULT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `STH` (`name`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)

    3.10. 刪除表的外鍵約束

    語法:
    ALTER TABLE <表名> DROP FOREIGN KEY <外鍵約束名>
    mysql> CREATE TABLE tb_emp9
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT,
    -> CONSTRAINT fk_emp_dept FOREIGN KEY (deptId) REFERENCES tb_dept1(id)
    -> );
    Query OK, 0 rows affected (0.04 sec)
    mysql> SHOW CREATE TABLE tb_emp9\G
    *************************** 1. row ***************************
    Table: tb_emp9
    Create Table: CREATE TABLE `tb_emp9` (
    `id` int(11) NOT NULL,
    `name` varchar(25) DEFAULT NULL,
    `deptId` int(11) DEFAULT NULL,
    `salary` float DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `fk_emp_dept` (`deptId`),
    CONSTRAINT `fk_emp_dept` FOREIGN KEY (`deptId`) REFERENCES `tb_dept1` (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    mysql> ALTER TABLE tb_emp9 DROP FOREIGN KEY fk_emp_dept;
    Query OK, 0 rows affected (0.08 sec)
    Records: 0 Duplicates: 0 Warnings: 0
    mysql> SHOW CREATE TABLE tb_emp9\G
    *************************** 1. row ***************************
    Table: tb_emp9
    Create Table: CREATE TABLE `tb_emp9` (
    `id` int(11) NOT NULL,
    `name` varchar(25) DEFAULT NULL,
    `deptId` int(11) DEFAULT NULL,
    `salary` float DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `fk_emp_dept` (`deptId`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)

    4.刪除數據表
    4.1. 刪除沒有被關聯的表

    語法:
    DROP TABLE [IF EXISTS]表1,表2...
    例如:mysql> DROP TABLE IF EXISTS tb_dept2;
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    mysql> SHOW TABLES;
    +----------------+
    | Tables_in_test |
    +----------------+
    | tb_dept1 |
    | tb_deptment3 |
    | tb_emp1 |
    | tb_emp2 |
    | tb_emp3 |
    | tb_emp4 |
    | tb_emp5 |
    | tb_emp7 |
    | tb_emp8 |
    | tb_emp9 |
    +----------------+
    10 rows in set (0.00 sec)

    4.2.刪除被其他表關聯的主表

    先創建表tb_dept2
    mysql> CREATE TABLE tb_dept2
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(22),
    -> location VARCHAR(50)
    -> );
    Query OK, 0 rows affected (0.08 sec)
    創建表tb_emp
    mysql> CREATE TABLE tb_emp
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT,
    -> CONSTRAINT fk_emp_dept FOREIGN KEY(deptId) REFERENCES tb_dept2(id)
    -> );
    Query OK, 0 rows affected (0.09 sec)
直接刪除父表tb_dept2
mysql> DROP TABLE tb_dept2;
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint
fails

可以看到在外鍵約束時,主表不能直接刪除。
mysql> ALTER TABLE tb_emp DROP FOREIGN KEY fk_emp_dept;
Query OK, 0 rows affected (0.09 sec)
Records: 0 Duplicates: 0 Warnings: 0
解除關聯子表tb_dept的外鍵約束
mysql> DROP TABLE tb_dept2;
Query OK, 0 rows affected (0.05 sec)
表就可以被刪除
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章