SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。
SQL语言分为3种类型:
数据库定义语言(DDL): 数据库、表、视图、索引、存储过程,例如增CREATE、删DROP、改ALTER
数据库操纵语言(DML): 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
数据库控制语言(DCL): 例如控制用户的访问权限GRANT(授权)、REVOKE(回收)
目录
一、库基本操作
1. 创建数据库
语法:
create database 数据库名 charset utf8;
数据库命名规则:可以由字母、数字、下划线、@、#、$
区分大小写
唯一性
不能使用关键字如 create select
不能单独使用数字
最长128位
2. 查看数据库
语法:
show databases;
show create database 数据库名; /* 查看数据库使用的字符编码 */
select database(); /* 查询当前所使用的数据库 */
举例:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db1 |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.02 sec)
mysql> show create database db1;
+----------+--------------------------------------------------------------+
| Database | Create Database |
+----------+--------------------------------------------------------------+
| db1 | CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+--------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> select database();
+------------+
| database() |
+------------+
| NULL |
+------------+
1 row in set (0.00 sec)
3. 选择数据库
语法:
use 数据库名;
4. 删除数据库
语法:
drop database 数据库名;
5. 修改数据库
语法:
alter database db1 charset utf8;
二、表基本操作
存储引擎即表类型。表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段。
1. 创建表
语法:
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);
举例:
mysql> create table t1(
-> id int(3),
-> name varchar(50),
-> age int(3),
-> sex enum('male', 'female')
-> );
Query OK, 0 rows affected (0.05 sec)
2. 查看数据库下所有表名
语法:
show tables;
3. 往表中插入记录
举例:
insert into t1 values
-> (1, 'egon', 21, 'male'),
-> (2, 'alex', 22, 'female')
-> ;
4. 查看表中记录
语法:
mysql> select * from t1;
mysql> select id, name from t1;
举例:
mysql> insert into t1(id) values /* 仅插入id字段 */
-> (3),
-> (4)
-> ;
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from t1;
+------+------+------+--------+
| id | name | age | sex |
+------+------+------+--------+
| 1 | egon | 21 | male |
| 2 | alex | 22 | female |
| 3 | NULL | NULL | NULL |
| 4 | NULL | NULL | NULL |
+------+------+------+--------+
4 rows in set (0.00 sec)
mysql> select id, name from t1;
+------+------+
| id | name |
+------+------+
| 1 | egon |
| 2 | alex |
| 3 | NULL |
| 4 | NULL |
+------+------+
4 rows in set (0.00 sec)
5. 查看表结构
语法:
desc t1;
describe t1; /* 等同于desc */
show create table t1G;
举例:
desc t1;
+-------+-----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| id | int(3) | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| age | int(3) | YES | | NULL | |
| sex | enum('male','female') | YES | | NULL | |
+-------+-----------------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
show create table t1G;
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`id` int(3) DEFAULT NULL,
`name` varchar(50) DEFAULT NULL,
`age` int(3) DEFAULT NULL,
`sex` enum('male','female') DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
6. 修改表
6.1 修改表名
语法:
mysql> alter table 表名
-> rename 新表名;
6.2 增加字段
语法:
alter table 表名
add 字段名 数据类型 [完整性约束条件…],
add 字段名 数据类型 [完整性约束条件…];
alter table 表名
add 字段名 数据类型 [完整性约束条件…] first; /* 加在最开头 */
alter table 表名
add 字段名 数据类型 [完整性约束条件…] after 字段名A; /* 加在字段名A之后 */
举例:
mysql> alter table t1
-> add apartment varchar(50) not null;
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> alter table t1
-> add college varchar(50) default 'cs' first;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> alter table t1
-> add class int(2) default 1 after college;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc t1;
+-----------+-----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-----------------------+------+-----+---------+-------+
| college | varchar(50) | YES | | cs | |
| class | int(2) | YES | | 1 | |
| id | int(3) | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| age | int(3) | YES | | NULL | |
| sex | enum('male','female') | YES | | NULL | |
| apartment | varchar(50) | NO | | NULL | |
+-----------+-----------------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
6.3 删除字段
语法:
mysql> alter table 表名
-> drop 字段名;
6.4 修改字段
语法:
alter table 表名
modify 字段名 数据类型 [完整性约束条件…];
alter table 表名
change 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
alter table 表名
change 旧字段名 旧字段名 新数据类型 [完整性约束条件…]; /* 等同于modify */
alter table 表名
change 旧字段名 新字段名 新数据类型 [完整性约束条件…];
modify:指定字段名修改数据类型及约束条件(即字段属性),不可修改字段名
change:指定旧字段名,修改字段名或字段属性或两者都修改
6.5 修改存储引擎
举例:
mysql> alter table service /* 表名 */
-> engine=innodb; /* 存储引擎类型 *
7. 复制表
-
复制表结构与记录 (key不会复制:主键、外键和索引)
语法:
mysql> create table 新表名 select * from 原表名;
新表与原表一模一样。
-
只复制表结构( 查询表empty无记录)
语法:
mysql> create table 新表名 select * from 原表名 where 1=2; /* 条件为假,查不到任何记录 */
或
mysql> create table 新表名 like 原表名;
8. 删除表
语法:
drop table 表名;