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:测试案例表
2.选择数据库语法
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 ….
- 注意:创建表的时候需要先选中数据库,就是制定将表创建到那个数据库中
6.显示表结构(desc语法)
代码测试:
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: 0 Duplicates: 0 Warnings: 0
10.添加列语法
alter table 表名 add column 列名 类型;
测试代码:
mysql> alter table emp add age int(3);
Query OK, 0 rows affected (0.24 sec)
Records: 0 Duplicates: 0 Warnings: 0
11.删除表的列:
alter table 表名 drop 列名;
测试代码:
mysql> alter table emp drop age;
Query OK, 0 rows affected (0.29 sec)
Records: 0 Duplicates: 0 Warnings: 0
12.修改列的名称
语法:
alter table 表名 change 原始名称 新的名称 列的类型;
测试代码:
mysql> alter table emp change ename name varchar(20);
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
注意:
- change和modify都可以修改表的定义
- change后面需要写2次列名,不方便
- 但是change的优点可以修改列的名称,modify不可以
13.表改名
语法:
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 set name = '关头强';
Query OK, 4 rows affected (0.04 sec)
Rows matched: 4 Changed: 4 Warnings: 0
//一般都会加上where语句
代码:
mysql> update csw set sal = '1000' where name = '关头强';
Query OK, 4 rows affected (0.03 sec)
Rows matched: 4 Changed: 4 Warnings: 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: 1 Changed: 1 Warnings: 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: 1 Changed: 1 Warnings: 0
mysql> 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. integer java int
2. smallint 32767~65535
3. decimal,dec(m,d) 和doublt范围相同
4. float
5. real 不知道
6. double
7. money
2. 字符类型
1. char 0~255 之间的字符
2. varcahr 0~65535的字符
3. text 65535
4. longtext ~~~~~~
5. VARBINARY(M) 可以存储多少M的字节.
3. 日期和时间
1. date yyyy-mm-dd
2. datetime yyyy-mm-dd hh:MM:ss
3. timestamp 时间戳
4. time hh:MM:ss
5. year yyyy
MySQL的左连接与右连接:http://www.jianshu.com/p/57e49960abb4