三、SQL语句
SQL语句用于维护管理数据库,包括数据查询、数据更新、访问控制、对象管理等功能。
SQL语句分类:
语句 代表的意思
DDL 数据定义语言,用于创建数据库对象,如库、表、索引等(create )
DML 数据操纵语言,用于对表中的数据进行管理(insert drop delete update )
DQL 数据查询语言,用于从数据表中查找符合条件的数据记录(select )使用最多
DCL 数据控制语言,用于设置或者更改数据库用户或角色权限(grant )
查询语句使用的熟练就是DBA(数据库管理员)
3.1创建及删除数据库和表
3.1.1 创建新的数据库
CREATE DATABASE 数据库名; #创建一个名为student的数据库 mysql> create database student;
3.1.2 创建新的表
主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键。
CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]); use student; create table info(id int,name char(10) not null,age int,sex char(4),score decimal(5,2)); desc info;
3.1.3 删除指定的数据表
在数据库内删
mysql> create table info1(id int,name char(10) not null,age int,sex char(4),sccore decimal(5,2)); mysql> drop table info1;
在数据库外删
3.1.4删除指定的数据库
DROP DATABASE 数据库名; mysql> drop database student;
3.2 管理表中的数据记录
3.2.1向数据表中插入新的数据记录
#向数据表中插入新的数据记录 insert into 表名(字段1,字段2,字段3) values(字段1的值,字段2的值,字段3的值); mysql> insert into info(id,name,age,sex,score) values(1,'小强',20,'男',95.5); Query OK, 1 row affected (0.00 sec) mysql> insert into info(id,name,age,sex,score) values(2,'小红',19,'女',90.9); Query OK, 1 row affected (0.00 sec) mysql> select * from info; +------+--------+------+------+-------+ | id | name | age | sex | score | +------+--------+------+------+-------+ | 1 | 小强 | 20 | 男 | 95.50 | | 2 | 小红 | 19 | 女 | 90.90 | +------+--------+------+------+-------+ 2 rows in set (0.00 sec)
直接使用表明加入字段 mysql> insert into info values(3,'小明',25,'男',99.99); Query OK, 1 row affected (0.00 sec) mysql> select * from info; +------+--------+------+------+-------+ | id | name | age | sex | score | +------+--------+------+------+-------+ | 1 | 小强 | 20 | 男 | 95.50 | | 2 | 小红 | 19 | 女 | 90.90 | | 3 | 小明 | 25 | 男 | 99.99 | +------+--------+------+------+-------+ 3 rows in set (0.00 sec)
可以指定字段添加 mysql> insert into info(id,name,age)values(4,'小芳',18); Query OK, 1 row affected (0.00 sec) mysql> select * from info; +------+--------+------+------+-------+ | id | name | age | sex | score | +------+--------+------+------+-------+ | 1 | 小强 | 20 | 男 | 95.50 | | 2 | 小红 | 19 | 女 | 90.90 | | 3 | 小明 | 25 | 男 | 99.99 | | 4 | 小芳 | 18 | NULL | NULL | +------+--------+------+------+-------+ 4 rows in set (0.00 sec)
3.2.2 查询数据记录
#格式 SELECT 字段名1,字段名2[,...] FROM 表名 [WHERE 条件表达式]; #示例1:查看所有数据 mysql> select * from info; +------+--------+------+------+-------+ | id | name | age | sex | score | +------+--------+------+------+-------+ | 1 | 小强 | 20 | 男 | 95.50 | | 2 | 小红 | 19 | 女 | 90.90 | | 3 | 小明 | 25 | 男 | 99.99 | | 4 | 小芳 | 18 | NULL | NULL | +------+--------+------+------+-------+ 4 rows in set (0.00 sec) #示例2:查询指定数据 mysql> select name from info where id=1; +--------+ | name | +--------+ | 小强 | +--------+ 1 row in set (0.00 sec) #示例3:只显示头2行 mysql> select * from info limit 2; +------+--------+------+------+-------+ | id | name | age | sex | score | +------+--------+------+------+-------+ | 1 | 小强 | 20 | 男 | 95.50 | | 2 | 小红 | 19 | 女 | 90.90 | +------+--------+------+------+-------+ 2 rows in set (0.00 sec) mysql> select * from info where id<=2; +------+--------+------+------+-------+ | id | name | age | sex | score | +------+--------+------+------+-------+ | 1 | 小强 | 20 | 男 | 95.50 | | 2 | 小红 | 19 | 女 | 90.90 | +------+--------+------+------+-------+ 2 rows in set (0.00 sec) #示例4:显示2-4行 mysql> select * from info limit 2,2; +------+--------+------+------+-------+ | id | name | age | sex | score | +------+--------+------+------+-------+ | 3 | 小明 | 25 | 男 | 99.99 | | 4 | 小芳 | 18 | NULL | NULL | +------+--------+------+------+-------+ 2 rows in set (0.01 sec) mysql> select * from info where id>2 and id<=4; +------+--------+------+------+-------+ | id | name | age | sex | score | +------+--------+------+------+-------+ | 3 | 小明 | 25 | 男 | 99.99 | | 4 | 小芳 | 18 | NULL | NULL | +------+--------+------+------+-------+ 2 rows in set (0.00 sec)
示例1:查看所有数据
示例2:查询指定数据
示例3:只显示头2行
示例4:显示2-4行
3.3修改、更新数据表中的数据记录
#格式 UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式]; #修改分数 mysql> select * from info where id=4; +------+--------+------+------+-------+ | id | name | age | sex | score | +------+--------+------+------+-------+ | 4 | 小芳 | 18 | NULL | 85.00 | +------+--------+------+------+-------+ 1 row in set (0.00 sec)
3.4 在数据表中删除指定的数据记录
#格式: DELETE FROM 表名 [WHERE 条件表达式]; 删除表中id为4的记录 mysql> delete from info where id=4; Query OK, 1 row affected (0.00 sec) mysql> select * from info; +------+--------+------+------+-------+ | id | name | age | sex | score | +------+--------+------+------+-------+ | 1 | 小强 | 20 | 男 | 95.50 | | 2 | 小红 | 19 | 女 | 90.90 | | 3 | 小明 | 25 | 男 | 99.99 | +------+--------+------+------+-------+ 3 rows in set (0.00 sec)
3.5修改表名和表结构
3.5.1 修改表名
ALTER TABLE 旧表名 RENAME 新表名; #将表名info修改成base mysql> alter table info rename base; Query OK, 0 rows affected (0.00 sec) mysql> show tables; +-------------------+ | Tables_in_student | +-------------------+ | base | | test1 | | test2 | +-------------------+ 3 rows in set (0.00 sec)
3.5.2 扩展表结构(增加字段)
#default 'default值':表示此字段设置默认值 地址未填写!;可与 NOT NULL 配合使用 ALTER TABLE 表名 ADD address varchar(50) default 'default值'; #alter table base add address char(100) default 'china';
3.5.3修改字段(列)名,添加唯一键
唯一键的作用,设置这个字段不能重复,比如说身份证、手机号,一般不作为主键,但也不能重复,就设置为唯一键
#格式 ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 [unique key]; #示例: mysql> alter table base change id snum char(4) unique key; Query OK, 3 rows affected (0.02 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> desc base; +---------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+-------+ | snum | char(4) | YES | UNI | NULL | | | name | char(10) | NO | | NULL | | | age | int(11) | YES | | NULL | | | sex | char(4) | YES | | NULL | | | score | decimal(5,2) | YES | | NULL | | | address | char(100) | YES | | china | | +---------+--------------+------+-----+---------+-------+ 6 rows in set (0.00 sec) #删除唯一约束 drop table info unique(key);
3.5.4删除字段
#格式 ALTER TABLE 表名 drop 字段名; #示例 mysql> alter table base drop age; Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> select * from base; +------+--------+------+-------+---------+ | snum | name | sex | score | address | +------+--------+------+-------+---------+ | 1 | 小强 | 男 | 95.50 | china | | 2 | 小红 | 女 | 90.90 | china | | 3 | 小明 | 男 | 99.99 | china | +------+--------+------+-------+---------+ 3 rows in set (0.00 sec)
3.6 使用 if 判断 创建表并测试自增和填充
create table if not exists stevelu ( id int(4) zerofill primary key auto_increment, name char(20) not null, sid int(18) not null unique key, ge int(3) not null, address char(10insert0)); 解析: if not exists:表示检测要创建的表是否已存在,如果不存在就继续创建 int(4) zerofill:表示若数值不满4位数,则前面用“0”填充,例0001 auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;自增长字段数据不可以重复; 自增长字段必须是主键; 如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次; 如果插入记录时给定id,下一次自增长根据最大的id开始自增长 unique key:表示此字段唯一键约束,此字段数据不可以重复;一张表中只能有一个主键, 但是一张表中可以有多个唯一键 not null:表示此字段不允许为NULL