一、数据库模式定义
mysql> CREATE DATABASE mydata; # 创建数据库
Query OK, 1 row affected (0.04 sec)
mysql> CREATE DATABASE mydata; # 创建数据库#
ERROR 1007 (HY000): Can't create database 'mydata'; database exists
mysql> CREATE DATABASE mydata; # 创建数据库
Query OK, 1 row affected (0.04 sec)
mysql> CREATE DATABASE IF NOT EXISTS mydata; # 创建之前检查一下该数据库是否存在
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> USE mydata; # 切换数据库
Database changed
mysql> DROP DATABASE mydata; # 删除数据库
Query OK, 0 rows affected (0.10 sec)
mysql> DROP DATABASE IF EXISTS mydata; # 删除之前检查一下该数据库是否存在
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> SHOW DATABASES; # 查看所有数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
二、表定义
补充知识:MYSQL的数据类型
数值类型
整数类型 INT
浮点类型 FLOAT DOUBLE DECIMAL
日期和时间类型
日期类型 DATE (YYY-MM-DD) YEAR
日期时间类型 DATETIME TIME
时间戳类型 TIMESTAMP
字符串类型
固定长度类型 CHAR最大长度255
可变长度类型 VARCHAR,最大长度65535
文本类型TEXT
1、 创建表
# 创建表的语法
CREATE [TEMPORARY] TABLE tbl_name
(
字段名1 数据类型 [列级完整性约束条件][默认值]
[,字段名2 数据类型 [列级完整性约束条件][默认值]]
[,......]
[,表级完整性约束条件]
)[ENGINE=引擎类型];
CREATE DATABASE IF NOT EXISTS mysql_test;
USE mysql_test;
CREATE TABLE customers (
cust_id INT NOT NULL AUTO_INCREMENT,
cust_name CHAR ( 50 ) NOT NULL,
cust_sex CHAR ( 1 ) NOT NULL DEFAULT 0,
cust_address CHAR ( 50 ) NULL,
cust_contact CHAR ( 50 ) NULL,
PRIMARY KEY ( cust_id )
);
CREATE TABLE student (
Sno CHAR ( 8 ) NOT NULL,
Sname CHAR ( 12 ) NOT NULL,
Ssex CHAR ( 1 ) NOT NULL DEFAULT 0,
Sage INT
);
2、 更新表
数据语法
(1) 添加字段子句
ALTER TABLE tbl_name
ADD [COLUMN] 新字段名 数据类型 [约束条件] [FIRST|AFTER 已有字段名]
ADD [COLUMN]
“ADD”:可在ALTER TABLE语句中添加ADD [COLUMN]子句实现向表中增加新列,且其可同时增加多个列。
“AFTER”:可将新列插入指定的某列之后,如下列例子所示,将cust_city列插入cust_sex列之后。也可通过关键字“FIRST”将新列作为表的第一列。若不指定这两个关键字,系统默认将新列添加到原表的最后。
“zhangzhikai.customers”:此例中对表名的指定采用的是完全限定的表名方式,即“db_name.tbl_name”的表名格式。
举例:向数据库zhangzhikai的表customer中添加一列,并命名为cust_city,显示用户所在城市,要求其不能为NULL,默认值为字符串‘Wuhan’,且该列位与原表cust_sex列之后。
mysql> ALTER TABLE zhangzhikai.customers
-> ADD COLUMN cust_city char(10) NOT NULL
DEFAULT’Wuhan’ AFTER cust_sex;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
(2) 修改字段子句
CHANGE[COLUMN]
“CHANGE”:可同时表中指定列的名字和数据类型,且在ALTER TABLE语句中可以同时放入多个CHANGE[COLUMN]子句,只需用逗号分隔。
举例:将数据库zhanghzhikai中表customer的cust_sex列重命名为sex,且将其数据类型更改为长度为(1)的字符数据类型char(1),允许其为NULL,默认值为字符常量‘M’。
mysql> ALTER TABLE zhangzhikai.customers
-> CHANGE COLUMNcust_sex sex char(1) NULL DEFAULT’M’;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
(3) 修改或删除表中指定列的默认值
ALTER[COLUMN]
“ALTER”:可在ALTER TABLE语句中添加ALTER[COLUMN]子句,用来修改或删除表中指定列的默认值。
举例:将数据库zhangzhikai中表customer的city_city的默认值修改为字符常量‘Beijing’.
mysql> ALTER TABLE zhangzhikai.customers
-> ALTER COLUMN cust_citySET DEFAULT‘Beijing’;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
(4) 修改指定列的数据类型
MODIFY[COLUMN]
“MODIFY”:在ALTER TABLE语句中添加MODIFY[COLUMN]子句只会修改指定列的数据类型,而不会干涉他的列名。另外MODIFY[COLUMN]子句还可以通过关键字“FIRST”或“AFTER”修改指定列表中的位置。
举例:将数据库zhangzhikai中表customer的city_name列的数据类型由之前的字符长度为50的定长字符数据类型char(50)更改为字符长度为20的定长字符数据类型char(20),并将此列设置成表的第一列。
mysql> ALTER TABLE zhangzhikai.customers
-> MODIFY COLUMN cust_namechar(20) FIRST;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
(5) 删除字段子句
DROP[COLUMN]
“DROP[COLUMN]”:在ALTER TABLE语句中添加DROP[COLUMN]子句操作卸除多余的列。
举例:删除数据库zhangzhikai中表customers的cust_conta列
mysql> ALTER TABLE zhangzhikai.customers
-> DROP COLUMN cust_contact;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
(6) 重命名表名
RENAME[TO]
“RENAME”:在ALTER TABLE语句中添加DROP[COLUMN]子句为表重新赋予一个表名。
举例:使用RENAME[TO]子句,重命名数据库zhangzhikai中表customers的表名为zzk。
mysql> ALTER TABLE zhangzhikai.customers
-> RENAME TO zhangzhikai.zzk;
Query OK, 0 rows affected (0.01 sec)
3.重命名表语法
RENAME TABLE tbl_name TO new_tbl_name
[,tbl_name2 TO new_tbl_name2]…
“RENAME TABLE”:可同时重命名多个表
举例:将表zzzk重新命名为ak,zzzzk重新命名为aak
mysql> RENAME TABLE zhangzhikai.zzzk TO zhangzhikai.ak
-> ,zhangzhikai.zzzzk TO zhangzhikai.aak;
Query OK, 0 rows affected (0.01 sec)
4.删除表语法
DROP[TEMPORARY] TABLE [IF EXISTS]
tbl_name[,tbl_name]…
[RESTRICT|CASCADE]
“DROP[TEMPORARY]”:可以同时删除多个表(包括临时表)
举例:同时删除ak,aak。
mysql> drop table zhangzhikai.ak
-> ,zhangzhikai.aak;
Query OK, 0 rows affected (0.01 sec)
5.查看表语法
(1) 显示表名称
SHOW[FULL]TABLES[{FROM|IN}db_name]
“SHOW[FULL]TABLES”:可以查看指定数据库的所有表名
举例:
mysql> show tables;
+———————————-+
| Tables_in_zhangzhikai |
+———————————-+
| aaa |
| bbb |
| ccc |
+———————————-+
3 rows in set (0.00 sec)
(2) 显示表的结构
SHOW[FULL] COLUMNS{FROM|IN} tbl_name [{FROM|IN} db_name]
[LIKE’PATTERN’|WHERE expr]
或者
{DESCRIBE|DESC} tbl_name [col_name|wild]
“SHOW[FULL] COLUMNS{FROM|IN}”:用来显示指定数据表的结构
“{DESCRIBE|DESC}”:DESCRIBE语句作为SHOW COLUMNS FROM语句的一种快捷方式。
举例:查看zhangzhikai数据库中的aaa表
mysql> desc zhangzhikai.aaa;
+———-+————-+———+——-+————-+———-+
| Field | Type | Null | Key | Default | Extra |
+———-+————-+———+——-+————-+———-+
| 11 | int(11) | NO | | NULL | |
| 22 | int(11) | NO | | NULL | |
| 33 | int(11) | NO | | NULL | |
| 44 | int(11) | NO | | NULL | |
+———-+————-+———+——-+————-+———-+
4 rows in set (0.01 sec)
mysql> desc zhangzhikai.kehuxinxi;
+————-+—————+———+——-+————-+————————+
| Field | Type | Null | Key | Default | Extra |
+————-+—————+———+——-+————-+————————+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | char(50) | NO | | NULL | |
| sex | char(1) | NO | | 0 | |
| address | char(50) | YES | | NULL | |
| contact | char(50) | YES | | NULL | |
+————-+—————+———+——-+————-+————————+
5 rows in set (0.01 sec)
mysql> SHOW TABLES FROM mysql;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| component |
| db |
| default_roles |
| engine_cost |
| func |
| general_log |
| global_grants |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| password_history |
| plugin |
| procs_priv |
| proxies_priv |
| role_edges |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
33 rows in set (0.00 sec)
mysql> desc user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(32) | NO | PRI | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
| Super_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Repl_slave_priv | enum('N','Y') | NO | | N | |
| Repl_client_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Create_user_priv | enum('N','Y') | NO | | N | |
| Event_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
| Create_tablespace_priv | enum('N','Y') | NO | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
| ssl_cipher | blob | NO | | NULL | |
| x509_issuer | blob | NO | | NULL | |
| x509_subject | blob | NO | | NULL | |
| max_questions | int(11) unsigned | NO | | 0 | |
| max_updates | int(11) unsigned | NO | | 0 | |
| max_connections | int(11) unsigned | NO | | 0 | |
| max_user_connections | int(11) unsigned | NO | | 0 | |
| plugin | char(64) | NO | | caching_sha2_password | |
| authentication_string | text | YES | | NULL | |
| password_expired | enum('N','Y') | NO | | N | |
| password_last_changed | timestamp | YES | | NULL | |
| password_lifetime | smallint(5) unsigned | YES | | NULL | |
| account_locked | enum('N','Y') | NO | | N | |
| Create_role_priv | enum('N','Y') | NO | | N | |
| Drop_role_priv | enum('N','Y') | NO | | N | |
| Password_reuse_history | smallint(5) unsigned | YES | | NULL | |
| Password_reuse_time | smallint(5) unsigned | YES | | NULL | |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
49 rows in set (0.01 sec)