一 数据库形式
数据库→表→记录
二 登录退出数据库
登录:mysql -h 主机名 -u 用户名 -p
- -h : 该命令用于指定客户端所要登录的MySQL主机名, 登录当前机器该参数可以省略;
- -u : 所要登录的用户名;
- -p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。
登录成功后你将会看到 Welecome to the MySQL monitor... 的提示语。
然后命令提示符会一直以 mysql> 加一个闪烁的光标等待命令的输入, 输入 exit 或 quit退出登录。
三 数据库操作(CRUD)
C:Creat 创建(创建数据库和表以及修改数据库和表命令类似 都是 create database /alter database或者create table /alter table
①创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name
[create_specification [, create_specification] ...] []内为可选项
create_specification: [DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE collation_name
如:
create database if not exists mydb1;
create database if not exsits mydb2 character set gbk;
②创建表
在对一个数据库进行操作时(因为表示数据库的内容), 必须先选择该数据库, 否则会提示错误。
选择数据库语句:use mydb1;
CREATE TABLE table_name
(
field1 datatype,注意字段名放在前面,字段类型放在后面,且每一个字段的隔开字符用逗号“ ,”表示
field2 datatype,
field3 datatype
) character set 字符集 collate 校对规则
field:指定列名(字段) datatype:指定列类型(字段类型) 与Java的类作对比
如:
create table students
(
id int unsigned not null,
name varchar(16) not null,
sex char(4) not null
); 注意每条语句的结尾都必须有;(部分特殊语句可能不需要,但最好有)
③创建记录(数据)
使用 INSERT 语句向表中插入数据。
INSERT INTO table [(column [, column...])] VALUES (value [, value...]); 其中 [] 内的内容是可选的
注意:①在values中列出的数据位置必须与被加入的列的排列位置相对应。②字符和日期型数据应包含在单引号中。
如:insert into students values(123001,"Jack","女");
有时我们只需要插入部分数据, 或者不按照列的顺序进行插入, 可以使用这样的形式进行插入:
insert into students (name, sex) values("孙丽华", "女");
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
R:Retrieve 读取、查找
①读取数据库
显示数据库语句:
SHOW DATABASES
显示数据库创建语句:
SHOW CREATE DATABASE db_name
②查找记录
使用select语句,用于查询并显示出来
SELECT [DISTINCT] *|{column1, column2. column3..} FROM table;
(1)Select 指定查询哪些列的数据。(2)column指定列名。(3)*号代表查询所有列。(4)From指定查询哪张表。(5)DISTINCT可选,指显示结果时,是否剔除重复数据
如:select * from students;
扩展:
1.在select语句中可使用表达式对查询的列进行运算
SELECT *|{column1|expression, column2|expression,..} FROM table;
2.SELECT column as 别名 from 表名;
如:
select name,math+10 as 数学 from students; 在from前面的as别名是用来显示的,在from后的as别名相当于对表的引用,和直接操作表是一样的。如 select d.name as '部门名' from department as d where d.name ='软件部';
3.使用where子句,进行过滤查询(查询特定的行)的数据
如:select * from students where name = 'Jack';
在where子句中经常使用的运算符
Like语句中,% 代表零个或多个任意字符,_ 代表一个字符,例first_name like ‘_a%’;
如:select * from students where name like '张%’; 显示所有姓张的对象
4.使用order by 子句排序查询结果。
SELECT column1, column2. column3..FROMtable order by column asc|desc
①Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的列名。②Asc 升序、Desc 降序 ③ORDER BY 子句应位于SELECT语句的结尾。
如:select * from students order by math desc; 按math成绩降序显示
5.函数
合计函数:select count(*) as 姓张的人数 from students where name like '张%‘ ; 显示有多少个姓张的人; select sum(math) as 数学总分 from students 显示所有学生的数学总成绩
平均值函数:select avg(math) as 数学平均分 from students;显示数学平均分
6.分类别和类别过滤
1.使用group by 子句对列进行分组
SELECT column1, column2. column3.. FROMtable group by column; 按照column对记录进行分类
如:
select product,sum(price) as 商品类别总价 from orders group by product 按商品进行分类,并把每一类的总价显示出来
2.使用having 子句组过滤
SELECT column1, column2. column3..
FROM table group by column having ...
如:
select product from table group by product having sum(price)>100; 把商品分类总价大于100的分类显示出来。
having与where的区别在于having是类别过滤器,where是行(对象)过滤器
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
U:Update 更新、更改
①更新数据库
ALTER DATABASE [IF EXISTS] db_name [alter_specification [, alter_specification] ...] []内可选
alter_specification: [DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE collation_name
如 alter database if exists mydb1 character set gbk;
②更新表
1.在表中添加其他列:
ALTER TABLE table
ADD (column datatype [DEFAULT expr] [, column datatype]...);
如:
在上面员工表的基本上增加一个image列。
alter table employee
add image blob;
2.修改表中的某一列:
ALTER TABLE table
MODIFY (column datatype [DEFAULT expr] [, column datatype]...);
如:
修改job列,使其长度为60。
alter table employee
modify job varchar(60) default 'teacher';
3.删除某一列
ALTER TABLE table
DROP (column);
如:
alter table students drop sex; 删除学生表中的sex列
4.修改列的名称
列名name修改为username。
alter table user
change column name username varchar(20);
5.修改表的名称:Rename table 原表名 to 新表名
③更新记录
使用 update语句修改表中数据。
UPDATEtbl_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]
UPDATE语法可以用新值更新原有表行中的各列。
SET子句指示要修改哪些列和要给予哪些值。
WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。
如:
update students set sex='男’ where name like '张%‘;更新所有姓张的性别为男
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
D:Delete 删除
①删除数据库
DROP DATABASE [IF EXISTS] db_name
如:drop database if exists mydb1;
②删除表
drop table if exists students;
③删除记录(数据)
delete from tbl_name [WHERE where_definition]
delete from table_name:按行删除表中的所有记录,但会保留表,适合删除数据量不大的数据,可按条件删除
truncate table table_name:复制原表结构-〉一次性删除整表 -> 自动恢复原表结构,适合删除数据量较大的数据,不能按条件删除
drop table table_name:删除表本身
总结:database和table的各个操作都相似,创建create database mydb1; create table students(...); 查看 show databases; show tables; show create database mydb1;show create table table1;(表特有的desc table1) ;修改时alter database database1 character set gbk; alter table table1 add score int;删除 drop database mydb1; drop table table1;
而记录都是特有的,创建时insert into students[()] values(...);查看使用select语句;修改使用update,update student set sex='nan' where name like '张%';删除使用delete语句 delete from user where name like '张%’;
表的约束和关联(为了数据的安全)
①约束
1.定义主键约束
primary key:不允许为空,不允许重复
删除主键:alter table tablename drop primary key ;
2.定义主键自动增长
auto_increment(MySQL特有/UUID类生成)
3.定义唯一约束
unique
4.定义非空约束
not null
5.定义外键约束
constraint ordersid_FK foreign key(ordersid) references orders(id),
②关联
1.一对一
2.一对多(外键在多方)
3.多对多(外键在关联表中)
一对多可以通过嵌入式SQL语句查询数据