一,基本操作;
查看:
#大部分sql操作命令必须以 ;结束
1.查看数据库信息;
show databases;
2.查看数据库中的表信息;
use + 数据库名;
show tables;
3.显示数据表的结构(字段)
describe user; #也可使用desc user;
二,SQL概述
SQL语言
- 结构化查询语言
- 关系型数据库的标准语言
- 用于维护管理数据库
包括数据查询,数据更新,访问控制,对象管理等功能;
SQL分类
DDL:数据定义语言
DML:数据操纵语言
DQL:数据查询语言
DCL:数据控制语言
三,操作
(增)
1.创建数据库和表
-
DDL语句用于创建数据库对象,如库,表,索引等;
-
使用DDL语句新建库,表
创建数据库: create database 数据库名称;
创建数据表: create table 表名 (字段名义…) -
创建数据库;
create database vov; -
创建数据表;
use vov;
create table vovs (name CHAR(16) NOT NULL,password CHAR(48) DEFAULT'', PRIMARY KEY (name));
注释:在vov库下常见vovs表,name字符不超过16不能为空,密码不超过48字符,默认'空',
2.管理表中的数据
- DML语句用于对表中的数据进行管理
- 包括操作
insert: 插入新数据;
update:更新原有数据;
delete:删除不需要的数据; - 向数据表中插入新的数据记录;
格式:insert into 表名(字段1,字段2,…) values (字段1的值,字段2的值,…)
例:在vov库下的vovs表中,插入新的表xiaoming,xioahong和密码;
use vov;
insert into vovs (name,password) values ('xiaoming',password('123123'));
use vov;
insert into vovs values('xiaohong',password('123456'));
注释:password(‘密码’) 是属于密文密码,不加password的话是明文密码;
(改)
修改,更新数据表中的数据记录;
格式:update 表名 set 字段名1=值1 ,字段名2=值2 where 条件表达式;
例:将vov.vovs 下的xiaohong表的密码更改明文为789789
update vov.vovs set password=('789789') where name='xiaohong';
(查)
- DQL是数据查询语句中,只有select
- 用于从数据表中查找符合条件的数据记录;
- 查询时可不指定条件;(数据表过多时,大量的数据一下查看,很危险的)
- 查询是指定条件;(一般最好用这个,指定查找)
格式:
1.查询不指定条件:select 字段名1,字段名2,…from 表名;
select * from vov.vovs; #查询vov.vovs下的所有!;*代表所有查找条件,字段…;
2.查询指定条件: select 字段名1,字段名2… from 表明 where 条件表达式;
select name,passwod from vov.vovs where name=‘xiaoming’;
(删)(高危操作!!)
DDL语句中:drop table
- 删除指定的数据表:drop table 库名.表名;
drop table vov.vovs;
mysql> use vov;
Database changed
mysql> show tables;
Empty set (0.00 sec)
- 删除指定的数据库:drop database 库名;
drop database vov;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hgg |
| myadm |
| mysql |
| performance_schema |
| sys |
| vov |
+--------------------+
7 rows in set (0.00 sec)
mysql> drop database vov;
Query OK, 0 rows affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hgg |
| myadm |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
#######################################################
- 在数据表中删除指定的数据记录;
格式:delete from 表名 where 条件表达式
delete from vov.vovs where name=‘xiaohong’;
- 不带where条件的语句表示删除表中所有的记录;(高危!慎用!不带where的)
delete from vov.vovs;
mysql> select * from vov.vovs
-> ;
+----------+-------------------------------------------+
| name | passwod |
+----------+-------------------------------------------+
| xiaohong | 789789 |
| xiaoming | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 |
+----------+-------------------------------------------+
2 rows in set (0.00 sec)
mysql> delete from vov.vovs where name='xiaoming';
Query OK, 1 row affected (0.00 sec)
mysql> select * from vov.vovs;
+----------+---------+
| name | passwod |
+----------+---------+
| xiaohong | 789789 |
+----------+---------+
1 row in set (0.00 sec)
mysql> delete from vov.vovs;
Query OK, 1 row affected (0.01 sec)
mysql> select * from vov.vovs;
Empty set (0.00 sec)
数据库用户授权;
-
查看用户的权限;
格式:show grants for 用户名@来源地址;
show grants for ‘wow’@’%’; #%可以是ip地址,%是所有ip???? -
设置用户授权(用户不存在时,则新建用户)
grant select on vov.* to 'wow'@'localhost' identified by '123123';
flush privileges;
mysql> show grants for 'wow'@'localhost'; #查看权限
+----------------------------------------------+
| Grants for wow@localhost |
+----------------------------------------------+
| GRANT USAGE ON *.* TO 'wow'@'localhost' |
| GRANT SELECT ON "vov".* TO 'wow'@'localhost' |
+----------------------------------------------+
2 rows in set (0.00 sec)
exit #退出当前管理用户
bye
mysql -u wow -p # 用wow用户登录,验证下权限;
Enter password:
mysql> drop table vov.vovs;
ERROR 1142 (42000): DROP command denied to user 'wow'@'localhost' for table 'vovs'
- 撤销用户的权限;
revoke 权限列表 on 数据库名.表名 from 用户名@来源地址;
revoke all on vov.* from 'wow'@'localhost'; #撤销所有权限 on vov数据库和所有表 from 'wow'@'主机登录';
mysql> show grants for 'wow'@'localhost';
+-----------------------------------------+
| Grants for wow@localhost |
+-----------------------------------------+
| GRANT USAGE ON *.* TO 'wow'@'localhost' |
+-----------------------------------------+
1 row in set (0.00 sec)
四,数据库高级操作
- 清空表
- 克隆表
- 临时表
1.清空表(高危!)
清空一个数据表就是删除这个表内的所有数据。
1.之前讲过的(删)里delete from 不指定条件,可以删除表内的所有记录;
2.truncate table 语句是删除表中的所有记录数据;灵活性差!!
3.一般使用灵活的 delete form where 条件表达!!!!!!
use vov;
create table yoy (name CHAR(16) NOT NULL,password CHAR(48) DEFAULT'',level CHAR(16) NOT NULL,PRIMARY KEY (name));
#在vov库下创建一个yoy表;
增加些记录到表内;
insert into yoy values ('xiaozhang',password('123123'),10);
insert into yoy values ('xiaozhang1',password('123123'),15);
insert into yoy values ('xiaozhang2',password('123123'),8);
insert into yoy values ('xiaozhang3',password('123123'),6);
mysql> select * from vov.yoy;
+------------+-------------------------------------------+-------+
| name | password | level |
+------------+-------------------------------------------+-------+
| xiaozhang | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 | 10 |
| xiaozhang1 | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 | 15 |
| xiaozhang2 | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 | 8 |
| xiaozhang3 | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 | 6 |
+------------+-------------------------------------------+-------+
mysql> truncate table vov.yoy;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from vov.yoy;
Empty set (0.00 sec)
2.克隆表
在mysql的开发和维护过程中,会有原样拷贝某个数据表的需求。如何快速的拷贝数据表?create table 新表 as select * from 要克隆的表数据;(但是表的索引,默认值等无法复制过来。)
as是连接语句的操作符,更多的是被用来设置别名;
复制表数据记录
mysql> create table lol as select * from yoy;
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select count(*)from lol;
+----------+
| count(*) |
+----------+
| 4 |
+----------+
1 row in set (0.01 sec)
克隆了四个数据记录!!
用软件图形化显示出来,方便大家能够理解;可以看到将原表数据记录都复制过来了;
- like方法
完整复制表结构,like方法可以将源表完全一样的复制生成一个新表,包括表的备注,索引,主键,存储引擎等,但不会复制表内的数据记录;
create table uou like yoy;
Query OK, 0 rows affected (0.01 sec)
mysql> show create table uou\G;
*************************** 1. row ***************************
Table: uou
Create Table: CREATE TABLE "uou" (
"name" char(16) NOT NULL,
"password" char(48) DEFAULT '',
"level" char(16) NOT NULL,
PRIMARY KEY ("name")
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
用软件图形化显示出来,方便大家能够理解;只复制表结构,不复制数据;
3.临时表
mysql的临时表,临时建立的表,并不会长期存在,主要用于保存一些临时的数据,临时表有个特性,就是只在当前连接可见,当前连接下课进行增删查改等操作,当连接关闭后,临时表就会被mysql删除,相关的资源也会被释放;
create temporary table `who` (`id`int(10) NOT NULL AUTO_INCREMENT,`NAME`varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,`level` int(10) NOT NULL,PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> insert into who (name,level) values('aa',10);
Query OK, 1 row affected (0.00 sec)
mysql> select * from who;
+----+------+-------+
| id | NAME | level |
+----+------+-------+
| 1 | aa | 10 |
+----+------+-------+
1 row in set (0.01 sec)
退出当前连接数据库用户!
mysql> use vov;
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
mysql> select * from who;
ERROR 1146 (42S02): Table 'vov.who' doesn't exist