扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
SQL语句---DDL语句
站在用户的角度思考问题,与客户深入沟通,找到淮阴网站设计与淮阴网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站建设、网站设计、企业官网、英文网站、手机端网站、网站推广、域名注册、网页空间、企业邮箱。业务覆盖淮阴地区。
==============================================================================
概述:
==============================================================================
---服务端命令:SQL语句,发往服务端运行,并取回结果;需要显式的语句结束符;
★DDL:数据定义语言,
☉作用:
主要用于数据库组件,例如数据库、表、索引、视图、触发器、事件调度器、存储过程、存储函数;
☉常用命令:
CREATE(创建), ALTER(修改), DROP(删除)(?后跟命令可获取帮助)
★DML:数据操纵语言
☉作用:
CRUD(增删改查)操作,主要用于操作表中的数据;每一种操作之前都要先查询;
☉命令
INSERT,DELETE,UPDATE,SELECT
★DCL:数据控制语言
☉作用:
授权用户,登录主机地址权限及回收权限
☉命令
GRANT(授权), REVOKE(回收权限)
SQL MODE:定义mysqld对约束等违反时的响应行为等设定;
★常用的MODE:
TRADITIONAL : 传统的模式,违反数据定义的统统都不被允许;
STRICT_TRANS_TABLES : 仅对事物型表严格限定;
STRICT_ALL_TABLES : 对所有的表都做严格限定;
★修改方式:
mysql> SET GLOBAL sql_mode='MODE';
mysql> SET @@global.sql_mode='MODE';
注意:
默认为空模式,如果违反数据定义,会发出警报,会以允许的最大范围去修减数据
sql mode为必改参数,要想永久生效,要写入配置文件
演示:
1.在sql mode模式为空的时候(默认),向表中插入数据,可以插入成功,但对违反数据定义的会对数据进行修减到允许的最大范围,如下:
MariaDB [(none)]> SELECT @@session.sql_mode; +--------------------+ | @@session.sql_mode | +--------------------+ | | +--------------------+ 1 row in set (0.00 sec) MariaDB [(none)]> CREATE DATABASE testdb; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> use testdb; Database changed MariaDB [testdb]> create table tbl1(id tinyint unsigned,name CHAR(5)); Query OK, 0 rows affected (0.03 sec) MariaDB [testdb]> insert into tbl1 (id) values (16),(256); # 默认最大为255 Query OK, 2 rows affected, 1 warning (0.00 sec) # 报错 Records: 2 Duplicates: 0 Warnings: 1 MariaDB [testdb]> select * from tbl1; +------+------+ | id | name | +------+------+ | 16 | NULL | | 255 | NULL | # 可以发现我们插入的256没有成功,只到允许插入的最大范围 +------+------+ 2 rows in set (0.00 sec) MariaDB [testdb]> insert into tbl1 (name) values ('jerry'),('taotaoxiuxiu'); Query OK, 2 rows affected, 1 warning (0.00 sec) Records: 2 Duplicates: 0 Warnings: 1 MariaDB [testdb]> show Warnings; +---------+------+-------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------+ | Warning | 1265 | Data truncated for column 'name' at row 2 | +---------+------+-------------------------------------------+ 1 row in set (0.00 sec) MariaDB [testdb]> select * from tbl1; +------+-------+ | id | name | +------+-------+ | 16 | NULL | | 255 | NULL | | NULL | jerry | | NULL | taota | # 我们定义的最大只能插入5个字符,多以多出来的将会被修减 +------+-------+ 4 rows in set (0.00 sec)
2.现在我们定义sql mode模式为TRADITIONAL(传统模式),即对数据进行严格的限定,对违反数据要求的统统不予许插入,如下:
MariaDB [testdb]> SET @@session.sql_mode='TRADITIONAL'; # 设定当前会话为传统模式; Query OK, 0 rows affected (0.00 sec) MariaDB [testdb]> SELECT @@session.sql_mode; +------------------------------------------------------------------------------------------------------------------------------------------------------+ | @@session.sql_mode | +------------------------------------------------------------------------------------------------------------------------------------------------------+ | STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) MariaDB [testdb]> insert into tbl1 (name) values ('jerry'),('taotaoxiuxiu'); ERROR 1406 (22001): Data too long for column 'name' at row 2 # 再次插入报错,不允许插入
1.获取帮助
mysql> help KEYWORD
mysql> help contents
演示:
MariaDB [(none)]> help contents You asked for help about help category: "Contents" For more information, type 'help- ', where
- is one of the following categories: Account Management Administration Compound Statements Data Definition Data Manipulation Data Types Functions Functions and Modifiers for Use with GROUP BY Geographic Features Help Metadata Language Structure Plugins Procedures Table Maintenance Transactions User-Defined Functions Utility MariaDB [(none)]> help Data Types # 获取数据类型 You asked for help about help category: "Data Types" For more information, type 'help
- ', where
- is one of the following topics: AUTO_INCREMENT BIGINT BINARY BIT BLOB BLOB DATA TYPE BOOLEAN CHAR CHAR BYTE DATE DATETIME DEC DECIMAL DOUBLE DOUBLE PRECISION ENUM FLOAT INT INTEGER LONGBLOB LONGTEXT MEDIUMBLOB MEDIUMINT MEDIUMTEXT SET DATA TYPE SMALLINT TEXT TIME TIMESTAMP TINYBLOB TINYINT TINYTEXT VARBINARY VARCHAR YEAR DATA TYPE MariaDB [(none)]> help INT Name: 'INT' Description: INT[(M)] [UNSIGNED] [ZEROFILL] A normal-size integer. The signed range is -2147483648 to 2147483647. The unsigned range is 0 to 4294967295. URL: http://dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html
2.数据库管理
★创建数据库:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name
character 字符集,SHOW CHARACTER SET 可查看所支持的字符集
★修改数据库
ALTER {DATABASE | SCHEMA} [db_name] CHARACTER SET [=] charset_name
★删除数据库
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
★相关命令:
SHOW CHARACTER SET //查看字符集;
SHOW COLLATION //查看排序规则;
SHOW CREATE DATABASE db_name //查看创建数据库时所使用的语句;
命令演示:
MariaDB [(none)]> show create database mydb; # 查看创建数据库mydb时的使用语句 +----------+-----------------------------------------------------------------+ | Database | Create Database | +----------+-----------------------------------------------------------------+ | mydb | CREATE DATABASE `mydb` /*!40100 DEFAULT CHARACTER SET latin1 */ | +----------+-----------------------------------------------------------------+ 1 row in set (0.00 sec) MariaDB [(none)]> alter database mydb character set 'utf8'; # 修改字符集 Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> show create database mydb; # 查看库创建 +----------+---------------------------------------------------------------+ | Database | Create Database | +----------+---------------------------------------------------------------+ | mydb | CREATE DATABASE `mydb` /*!40100 DEFAULT CHARACTER SET utf8 */ | +----------+---------------------------------------------------------------+ 1 row in set (0.00 sec)
3.表管理
1)表创建
★语法:
CREATE TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options]
☉create_definition:由逗号分隔的列表
◆字段定义:
column_name column_defination 字段名称+字段定义相关信息
◆约束定义:
PRIMARY KEY(col1[,col2, ....])
UNIQUE KEY
FOREIGN KEY
CHECK(expr)
◆索引定义:
{INDEX|KEY} 普通索引创建
{FULLTEXT|SPATIAL} 全文索引,空间索引
注意:column_definition:
data_type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string']
☉table_option:
ENGINE [=] engine_name 存储引擎
★查看数据库支持的存储引擎种类:
mysql> SHOW ENGINES;
★查看指定表的存储引擎:
mysql> SHOW TABLE STATUS LIKE clause;
★查看表结构定义:
DESC tbl_name;
★查看表状态属性信息:
SHOW TABLE STATUS [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]
演示:
1.表创建:
[root@centos7 ~]# mysql -p134296 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 28 Server version: 5.5.44-MariaDB MariaDB Server Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mydb | | mysql | | performance_schema | | test | | ultrax | +--------------------+ 6 rows in set (0.00 sec) MariaDB [(none)]> USE mydb; Database changed MariaDB [mydb]> CREATE TABLE tbl1 (id SMALLINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,name CHAR(30) NOT NULL,age TINYINT UNSIGNED,gender ENUM('F','M') DEFAULT 'M',UNIQUE KEY(name,gender),INDEX(name)); Query OK, 0 rows affected (0.04 sec) MariaDB [mydb]> DESC tbl1; +--------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+----------------------+------+-----+---------+----------------+ | id | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | name | char(30) | NO | MUL | NULL | | | age | tinyint(3) unsigned | YES | | NULL | | | gender | enum('F','M') | YES | | M | | +--------+----------------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec)
2.查看存储引擎类型:
MariaDB [(none)]> show engines; +--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ | InnoDB | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | CSV | YES | CSV storage engine | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | FEDERATED | YES | FederatedX pluggable storage engine | YES | NO | YES | | Aria | YES | Crash-safe tables with MyISAM heritage | NO | NO | NO | +--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ 10 rows in set (0.00 sec)
3.查看表状态信息:
MariaDB [mydb]> show table status\G *************************** 1. row *************************** Name: tbl1 Engine: InnoDB Version: 10 Row_format: Compact Rows: 0 Avg_row_length: 0 Data_length: 16384 Max_data_length: 0 Index_length: 32768 Data_free: 0 Auto_increment: 1 Create_time: 2016-10-16 17:54:32 Update_time: NULL Check_time: NULL Collation: utf8_general_ci Checksum: NULL Create_options: Comment: # 如果有多个表的话,可以使用where name 或者like 匹配相关的表 MariaDB [(none)]> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [mysql]> show tables; +---------------------------+ | Tables_in_mysql | +---------------------------+ | columns_priv | | db | | event | | func | | general_log | | help_category | | help_keyword | | help_relation | | help_topic | | host | | ndb_binlog_index | | plugin | | proc | | procs_priv | | proxies_priv | | servers | | slow_log | | tables_priv | | time_zone | | time_zone_leap_second | | time_zone_name | | time_zone_transition | | time_zone_transition_type | | user | +---------------------------+ 24 rows in set (0.02 sec) MariaDB [mysql]> show table status like 'proc%'\G # 匹配proc相关的表 *************************** 1. row *************************** Name: proc Engine: MyISAM Version: 10 Row_format: Dynamic Rows: 0 Avg_row_length: 0 Data_length: 292 Max_data_length: 281474976710655 Index_length: 4096 Data_free: 292 Auto_increment: NULL Create_time: 2016-10-12 20:06:15 Update_time: 2016-10-12 20:06:15 Check_time: NULL Collation: utf8_general_ci Checksum: NULL Create_options: Comment: Stored Procedures *************************** 2. row *************************** Name: procs_priv Engine: MyISAM Version: 10 Row_format: Fixed Rows: 0 Avg_row_length: 0 Data_length: 0 Max_data_length: 239253730204057599 Index_length: 4096 Data_free: 0 Auto_increment: NULL Create_time: 2016-10-12 20:06:15 Update_time: 2016-10-12 20:06:15 Check_time: NULL Collation: utf8_bin Checksum: NULL Create_options: Comment: Procedure privileges 2 rows in set (0.01 sec)
--------------------------------------------------------------------------------------------------------------------------------------
2)表修改
★语法:
ALTER TABLE tbl_name [alter_specification [, alter_specification] ...]
☉alter_specification
◆表选项
ENGINE=engine_name
...
◆表定义
字段
ADD :增
DRO:删
CHANGE :大改
MODIFY :局部范围小改动
键和索引
ADD {PRIMARY|UNIQUE|FOREIGN} key (col1, col2, ...)
ADD INDEX(col1, col2, ...)
DROP {PRIMARY|UNIQUE|FOREIGN} KEY key_name;
DROP INDEX index_name;
★查看表上的索引信息:
SHOW INDEXES FROM tbl_name;
命令演示:
MariaDB [mydb]> use mydb MariaDB [mydb]> show index from tbl1; +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | tbl1 | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | | tbl1 | 0 | name | 1 | name | A | 0 | NULL | NULL | | BTREE | | | | tbl1 | 0 | name | 2 | gender | A | 0 | NULL | NULL | YES | BTREE | | | | tbl1 | 1 | name_2 | 1 | name | A | 0 | NULL | NULL | | BTREE | | | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 4 rows in set (0.00 sec) MariaDB [mydb]> alter table tbl1 drop index name_2; # 删除索引name_2 Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 MariaDB [mydb]> show index from tbl1; +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | tbl1 | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | | tbl1 | 0 | name | 1 | name | A | 0 | NULL | NULL | | BTREE | | | | tbl1 | 0 | name | 2 | gender | A | 0 | NULL | NULL | YES | BTREE | | | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 3 rows in set (0.00 sec) MariaDB [mydb]> desc tbl1; +--------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+----------------------+------+-----+---------+----------------+ | id | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | name | char(30) | NO | MUL | NULL | | | age | tinyint(3) unsigned | YES | | NULL | | | gender | enum('F','M') | YES | | M | | +--------+----------------------+------+-----+---------+----------------+ 4 rows in set (0.01 sec) MariaDB [mydb]> alter table tbl1 add ClassID TINYINT UNSIGNED NOT NULL; # 新增加一个字段 Query OK, 0 rows affected (0.08 sec) Records: 0 Duplicates: 0 Warnings: 0 MariaDB [mydb]> desc tbl1; +---------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+----------------------+------+-----+---------+----------------+ | id | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | name | char(30) | NO | MUL | NULL | | | age | tinyint(3) unsigned | YES | | NULL | | | gender | enum('F','M') | YES | | M | | | ClassID | tinyint(3) unsigned | NO | | NULL | | +---------+----------------------+------+-----+---------+----------------+ 5 rows in set (0.00 sec) # 使用modify局部修改放到age的行后面 MariaDB [mydb]> alter table tbl1 modify ClassID TINYINT UNSIGNED NOT NULL after age; Query OK, 0 rows affected (0.11 sec) Records: 0 Duplicates: 0 Warnings: 0 MariaDB [mydb]> desc tbl1; +---------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+----------------------+------+-----+---------+----------------+ | id | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | name | char(30) | NO | MUL | NULL | | | age | tinyint(3) unsigned | YES | | NULL | | | ClassID | tinyint(3) unsigned | NO | | NULL | | | gender | enum('F','M') | YES | | M | | +---------+----------------------+------+-----+---------+----------------+ 5 rows in set (0.00 sec)
-------------------------------------------------------------------------------
3)表删除和查看表创建
★表删除
DROP TABLE [IF EXISTS] tbl_name [, tbl_name] ...
可以一次删除多个表
★查看表创建语句:
SHOW CREATE TABLE tbl_name
4.索引管理
★引入索引的作用:
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。
★索引类型:
聚集索引、非聚集索引:索引是否与数据存在一起;
主键索引、辅助索引
稠密索引、稀疏索引:是否索引了每一个数据项;
BTREE(B+)、HASH、R Tree、FULLTEXT
BTREE:左前缀;
★创建
☉语法:
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name ON tbl_name (index_col_name,...) 索引字段名称
index_col_name:
col_name [(length)] [ASC | DESC]
{INDEX|KEY} :普通索引创建
{FULLTEXT|SPATIAL} :全文索引,空间索引
★删除:
DROP INDEX index_name ON tbl_name
★查看:
SHOW {INDEX | INDEXES | KEYS} {FROM | IN} tbl_name [{FROM | IN} db_name] [WHERE expr]
★使用ALTER 命令添加和删除索引
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list):
该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list):
这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。
ALTER TABLE tbl_name ADD INDEX index_name (column_list):
添加普通索引,索引值可出现多次。
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):
该语句指定了索引为 FULLTEXT ,用于全文索引。
命令演示:
MariaDB [mydb]> show index from tbl1; # 查看索引 +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | tbl1 | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | | tbl1 | 0 | name | 1 | name | A | 0 | NULL | NULL | | BTREE | | | | tbl1 | 0 | name | 2 | gender | A | 0 | NULL | NULL | YES | BTREE | | | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 3 rows in set (0.03 sec) MariaDB [mydb]> drop index name on tbl1; # 删除索引 Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0 MariaDB [mydb]> show index from tbl1; +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | tbl1 | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 1 row in set (0.00 sec) MariaDB [mydb]> create index name_and_gender on tbl1(name(5),gender); # 创建索引 Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0 MariaDB [mydb]> show index from tbl1; # 查看如下 +-------+------------+-----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +-------+------------+-----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | tbl1 | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | | tbl1 | 1 | name_and_gender | 1 | name | A | 0 | 5 | NULL | | BTREE | | | | tbl1 | 1 | name_and_gender | 2 | gender | A | 0 | NULL | NULL | YES | BTREE | | | +-------+------------+-----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 3 rows in set (0.00 sec) MariaDB [mydb]> show index from tbl1 where Key_name like 'name%'; # 查看指定的索引 +-------+------------+-----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +-------+------------+-----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | tbl1 | 1 | name_and_gender | 1 | name | A | 0 | 5 | NULL | | BTREE |
名称栏目:MySQL数据库SQL语句---DDL语句
地址分享:http://kswjz.com/article/piesjs.html
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流