1.什么是数据库?
一个装数据的大容器,有数据文件,日志文件,DBMS(数据库管理软件)
2.数据库是用来做什么的?
存储数据的
3.有哪几个数据库?
DB2
ORACLE
SQL Server
mySql
4.SQL语言分类
DDL语句:数据定义语言
create(创建),drop(移除),alter(改变)等
对数据库,表,索引等数据对象进行定义
DML语句:数据操作语言
insert(添加)
update(修改)
delete(删除)
select(查询)DCL语句:数据控制语言
主要控制数据库,表,字段,用户的访问权限和安全级别的授予
5.DDL语句 注意:每一条语句后面都要跟分号(;)或\g结束,或者ctrl+c
1.创建数据库语法:
create databases 数据库名称
代码示例:
mysql> create database lanqiao;
Query OK, 1 row affected (0.00 sec)mysql> show databases
-> \g
测试结果:
+--------------------+
| Database|
+--------------------+
| information_schema |
| lanqiao|
| mysql|
| performance_schema |
| sakila|
| sys|
| world|
+--------------------+
7 rows in set (0.00 sec)
- information_schema:注意存储了数据中存储的数据库对象,比如用户表,列的信息。权限信息,字符集信息
- mySql:存储系统的用户权限
- world:测试案例表
use 数据库名称
代码测试:
mysql> use lanqiao;
Database changed
3.显示数据库中所有表语法
show tables;
4.删除数据库语法
drop database 数据库名称
代码测试:
mysql> drop database lanqiao
-> \g
Query OK, 0 rows affected (0.03 sec)数据库删除后,下面的所有的表都被删除
5.创建表语法
create table 表名(
列名1:列的类型
列名2:列的类型
列名3:列的类型)
代码测试:
mysql> create table emp(
-> ename varchar(10),
-> hiredate date,
-> sal int,
-> deptno int
-> );
Query OK, 0 rows affected (0.18 sec)
- 一个表相当一个类,列名相当类的属性
- 表名:等价于文件的名称可以为任意目录
- 列名:表头
- 列的类型:int , char,varchar ....
- 注意:创建表的时候需要先选中数据库,就是制定将表创建到那个数据库中
代码测试:
mysql> desc emp
-> \g
测试结果
+----------+-------------+------+-----+---------+-------+
| Field| Type| Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| ename| varchar(10) | YES|| NULL||
| hiredate | date| YES|| NULL||
| sal| int(11)| YES|| NULL||
| deptno| int(11)| YES|| NULL||
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
7.显示创建表的语法
show create table emp;
测试代码:
mysql> show create table employ;
8.删除表
drop table 表名
9.修改列的类型语法
alter table 表名 modify 列名 列的类型;
测试代码:
mysql> alter table emp modify ename varchar(20);
Query OK, 0 rows affected (0.06 sec)
Records: 0Duplicates: 0Warnings: 0
10.添加列语法
alter table 表名 add column 列名 类型;
测试代码:
mysql> alter table emp add age int(3);
Query OK, 0 rows affected (0.24 sec)
Records: 0Duplicates: 0Warnings: 0
11.删除表的列:
alter table 表名 drop 列名;
测试代码:
mysql> alter table emp drop age;
Query OK, 0 rows affected (0.29 sec)
Records: 0Duplicates: 0Warnings: 0
12.修改列的名称
语法:
alter table 表名 change 原始名称 新的名称 列的类型;
测试代码:
mysql> alter table emp change ename name varchar(20);
Query OK, 0 rows affected (0.04 sec)
Records: 0Duplicates: 0Warnings: 0
注意:
- change和modify都可以修改表的定义
- change后面需要写2次列名,不方便
- 但是change的优点可以修改列的名称,modify不可以
语法:
alter table 表名 rename 新表名
代码:
mysql> alter table emp rename example;
Query OK, 0 rows affected (0.10 sec)
14.修改列的排列顺序
DML语句
DML是操作对数据库中表记录的操作
主要表的记录操作有:
插入(insert)
查询(select)
删除(delete)
更改(update)
1.插入(insert)一次添加多条
语法:
insert into tablename(列名1,列名2.....列名n)
,(值1,值2.......值n),
,(值1,值2.......值n),
,(值1,值2.......值n);
代码:
mysql> insert into example(name,age,date)values('csw',10,'1');
Query OK, 1 row affected (0.04 sec)对于含可空列的,非空但是含有默认值的字段,自增字段,可以不用在insert后添加列名,values后面直接对应列就行
代码:
mysql> insert into emp(name)values('guang');
Query OK, 1 row affected (0.03 sec)mysql> select * from emp;
+-------+------+------+
| name| age| date |
+-------+------+------+
| csw|10 | 1|
| guang | NULL | NULL |
+-------+------+------+
2 rows in set (0.00 sec)表结构(允许列为空):
+------+
| Null |
+------+
| YES|
| YES|
| YES|
+------+
2.更改(update)
语法:
update 表名 set 列名1 = 值1,列名2 = 值2...列名n = 值n;
对表中的数据,可以通过update命令进行修改
代码:
mysql> update csw setname = '关头强';
Query OK, 4 rows affected (0.04 sec)
Rows matched: 4Changed: 4Warnings: 0
//一般都会加上where语句
代码:
mysql> update csw set sal = '1000' where name = '关头强';
Query OK, 4 rows affected (0.03 sec)
Rows matched: 4Changed: 4Warnings: 0
代码:
mysql> select * from csw;
结果:
+-----------+-----------+------+-------+
| name| hiredate| sal| depno |
+-----------+-----------+------+-------+
| 关头强| 2017-4-15 | 1000 | 1000|
| 关头强| 2080-5-1| 1000 | NULL|
| 关头强| 2080-5-1| 1000 | NULL|
| 关头强| 2001-1-1| 1000 | NULL|
+-----------+-----------+------+-------+
4 rows in set (0.00 sec)
由于没有加where条件,所以将所有的name都修改了。而下面是只修改了depno=1000那一项
代码:
mysql> update csw set sal = sal+500 where depno = 1000;
Query OK, 1 row affected (0.14 sec)
Rows matched: 1Changed: 1Warnings: 0
结果:
mysql> select * from csw;
+-----------+-----------+------+-------+
| name| hiredate| sal| depno |
+-----------+-----------+------+-------+
| 关头强| 2017-4-15 | 1500 | 1000|
| 关头强| 2080-5-1| 1000 | NULL|
| 关头强| 2080-5-1| 1000 | NULL|
| 关头强| 2001-1-1| 1000 | NULL|
+-----------+-----------+------+-------+
4 rows in set (0.00 sec)
修改表中多列的数据:
mysql> update emp set sal = 3000,deptno = 1 where name = 'aaa';
Query OK, 1 row affected (0.04 sec)
Rows matched: 1Changed: 1Warnings: 0mysql> select * from emp;
结果:
+-------+------------+------+--------+
| name| hiredate| sal| deptno |
+-------+------------+------+--------+
| admin | 1999-09-09 | 1500 |1 |
| wuyu| 2014-08-09 | 2000 |2 |
| aaa| NULL| 3000 |1 |
+-------+------------+------+--------+
3 rows in set (0.00 sec)
3.删除(delete)
语法:
delete from tablename [where condition]
代码:
mysql> delete from csw where sal = '1000';
Query OK, 3 rows affected (0.03 sec)
结果:
mysql> select * from csw;
+-----------+-----------+------+-------+
| name| hiredate| sal| depno |
+-----------+-----------+------+-------+
| 关头强| 2017-4-15 | 1500 | 1000|
+-----------+-----------+------+-------+
1 row in set (0.00 sec)
注意:如果不加条件会把表的所有信息删除
4.查询(select)
数据插入到表中,就可以使用select命令进行各式各样的查询
mysql> select * from csw;
+-----------+-----------+------+-------+
| name| hiredate| sal| depno |
+-----------+-----------+------+-------+
| qiang| 2017-4-15 | 3000 | 1000|
| 小强| 2080-5-1| NULL | NULL|
| 小强| 2080-5-1| NULL | NULL|
| 打不死| 2001-1-1| NULL | NULL|
+-----------+-----------+------+-------+*表示要将所有的列信息全部显示出来.mysql> select name,sal from emp;
+-------+------+
| name| sal|
+-------+------+
| admin | 2000 |
| wuyu| 2000 |
+-------+------+
2 rows in set (0.00 sec)
注意:性能问题,推荐写列名,不要使用*号
5.查询不重复的记录.distinct 去除重复.###
mysql> select * from dept;
+--------+----------+
| deptno | deptname |
+--------+----------+
|1 | aa|
|2 | aa|
|3 | bb|
|4 | cc|
+--------+----------+
4 rows in set (0.00 sec)mysql> select distinct deptname from dept;
+----------+
| deptname |
+----------+
| aa|
| bb|
| cc|
+----------+
3 rows in set (0.04 sec)
6.条件查询 where关键字可以显示用户指定的数据
逻辑运算符:
=,>,<,>=,<=,!=,<>
测试语句:
mysql> select * from dept where deptno > 2;
+--------+----------+
| deptno | deptname |
+--------+----------+
|3 | bb|
|4 | cc|
+--------+----------+
2 rows in set (0.00 sec)逻辑运算符(or,and)
mysql> select * from dept where deptno = 1 or deptname = 'cc';
+--------+----------+
| deptno | deptname |
+--------+----------+
|1 | aa|
|4 | cc|
+--------+----------+
2 rows in set (0.02 sec)mysql> select * from emp where name ='admin' and sal >1000;
+-------+------------+------+--------+
| name| hiredate| sal| deptno |
+-------+------------+------+--------+
| admin | 1999-09-09 | 2000 |1 |
+-------+------------+------+--------+
1 row in set (0.00 sec)
重点 : 排序(order by)
语法:
select * from 表名 [where 条件] [order by 列名1[desc|asc],列名2 [desc|asc]....列名n [desc|asc]]desc : 降序
asc : 升序
语句:
mysql> select * from emp order by sal desc ,deptno desc;
+-------+------------+------+--------+
| name| hiredate| sal| deptno |
+-------+------------+------+--------+
| wuyu| 2014-08-09 | 2000 |2 |
| admin | 1999-09-09 | 2000 |1 |
| wwwaa | NULL| 1000 |3 |
+-------+------------+------+--------+
3 rows in set (0.00 sec)
DCL语句 1.主要是DBA用来管理系统中的对象权限.
创建一个数据库用户wuyu,具有对lq数据库中所有表的查询和添加权限.
mysql> grant select,insert on lq.* to 'wuyu'@'localhost' identified by '123';
Query OK, 0 rows affected, 1 warning (0.22 sec)C:\Users\Administrator>mysql -uwuyu -p123
mysql -u用户名 -p密码
2.MySQL支持的数据类型
1. 数值类型
1. integerjava int
2. smallint32767~65535
3. decimal,dec(m,d) 和doublt范围相同
4. float
5. real不知道
6. double
7. money
2. 字符类型
1. char0~255 之间的字符
2. varcahr0~65535的字符
3. text65535
4. longtext~~~~~~
5. VARBINARY(M) 可以存储多少M的字节.
3. 日期和时间
1. dateyyyy-mm-dd
2. datetimeyyyy-mm-dd hh:MM:ss
3. timestamp时间戳
4. timehh:MM:ss
5. yearyyyy
【MySQL常用语法】MySQL的左连接与右连接:http://www.jianshu.com/p/57e49960abb4