文章目录
转载请注明原始出处:http://blog.csdn.net/a464057216/article/details/52496916
后续此博客不再更新,欢迎大家搜索关注微信公众号“测开之美”,测试开发工程师技术修炼小站,持续学习持续进步。
简介
SQL是ANSI标准下访问和处理数据库的结构化查询语言。SQL可以在各个RDBMS(关系型数据库管理系统,如MySQL、Microsoft Access)中使用,各个RDBMS也有自己独有的扩展。
RDBMS中,不同数据存储在不同的数据库中。每个数据库通常包含多个表,多个表由表名区分。表由行和列组成,每一行对应一条数据,每一列对应数据的一个属性。
下面通过MySQL介绍SQL语言。首先查看MySQL状态:
mysql> status;
--------------
/usr/local/mysql/bin/mysql Ver 14.14 Distrib 5.7.15, for osx10.11 (x86_64) using EditLine wrapper
Connection id: 1779
Current database: lmz
Current user: root@localhost
SSL: Not in use
Current pager: less
Using outfile: ''
Using delimiter: ;
Server version: 5.7.15 MySQL Community Server (GPL)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /tmp/mysql.sock
Uptime: 4 hours 34 min 45 sec
Threads: 1 Questions: 161 Slow queries: 0 Opens: 120 Flush tables: 1 Open tables: 101 Queries per second avg: 0.009
--------------
如果字符集的配置不是utf8,建议改成utf8:
mysql> set character_set_client=utf8;
mysql> set character_set_connection=utf8;
mysql> set character_set_results=utf8;
mysql> set character_set_server=utf8;
set命令后面的参数可以通过如下命令查询:
mysql> show variables like "character%";
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql-5.7.15-osx10.11-x86_64/share/charsets/ |
+--------------------------+---------------------------------------------------------+
8 rows in set (0.11 sec)
把除了character_set_filesystem
和character_sets_dir
之外的变量都设置成utf8。
SQL语言
SQL语言分为两部分:数据定义语言(DDL)和数据操作语言(DML)。
##DDL
包括创建/删除/修改数据库/数据表的方法、定义索引、添加表约束等:
show databases
列出全部数据库。
create database <database_name>
创建名为<database_name>
的数据库,比如create database mars;
。
drop database <database_name>
删除名为<database_name>
的数据库。
use <database_name>
使用某个数据库(然后才能操作其中的表),比如use mars;
。
show tables
查看数据库中所有数据表。
create table <table_name> (<column_1> <type>, ..)
创建数据表,其中<table_name>
表示表名,<column_n>
表示列名,<type>
表示对应列的数据类型。
添加列的约束条件
not null
not null表示该列不接受空,比如:
NULL表示没有值,和取值为0不同。
unique
unique限制某一列或者多个列元素的唯一性(如果该列允许为NULL的话,则唯一性无法限制存在多个NULL的情况,所以如果限制为unique,最好同时限制not null),比如:
也可以为unique的规则命名,比如:
使用规则的名字可以删除这条规则,比如:
如果unique规则在创建时没有命名,删除方法如下:
mysql> create table a (id int(5), op varchar(15), unique (id));
Query OK, 0 rows affected (0.03 sec)
mysql> show create table a;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------+
| a | CREATE TABLE `a` (
`id` int(5) DEFAULT NULL,
`op` varchar(15) DEFAULT NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> alter table a drop index `id`;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table a;
+-------+-----------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-----------------------------------------------------------------------------------------------------------------------+
| a | CREATE TABLE `a` (
`id` int(5) DEFAULT NULL,
`op` varchar(15) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+------