mysql基础知识

来源:互联网 发布:福彩快3源码 编辑:程序博客网 时间:2024/06/08 19:00

SQL(Structured Query Language)结构化查询语言

组成:DQL 数据查询语言

  DDL数据定义语言

  DML数据操作语言

  DCL数据控制语言

  TPL事务处理语言

  CCL指针控制语言

接下来开始正式学习,首先要安装mysql,然后控制台输入mysql -u root -p 回车输入密码,如果出现welcome...说明已经成功了,show databases;看看有哪些库


接着看看上面的几种组成语言

DDL 数据定义:定义库和表的结构,比如create,alter,drop

创建库:create database 库名 character set 字符集  collate 校对规则;

create database testdb character set gbk collate gbk_chinese_ci;

校对规则我理解为用于一些特殊的比较,比如字符串的比较规则,这个和字符集需要对应(查文档),一般直接create database 数据库;就可以了。

show create database 库名;可以查看数据库信息。

show variables like 'character%';查看数据库的各种编码

删除库:drop database 库名;

drop database testdb;

选择数据库:use 库名;

创建表:create table 表名 (列名 类型,列名 类型...) character set 字符集 collate 校对规则;

create table student( id int, name varchar(100), birthday date, grade float(4,1), other text );date为日期格式,float第一位表示总位数,第二位表示小数点后有几位.如果表名或字段名要与关键字同名需要用``(esc下面的按键)括起来

查看表:show tables;

查看表结构:desc 表名;

查看表的细节:show create table 表名;

修改表:这个太多了,大家可以查看文档,这里只列出几个常用的 

添加一列 alter table 表名 add image blob;添加一个字段,二进制类型

删除列 alter table 表名 drop 要删的字段名;

修改某列类型:alter table 表名 modify name varchar(150);modify 要修改成什么样

修改列名:alter table 表名 change 原字段名 新字段名;

alter table student change job newjob varchar(50);

修改表字符集:alter table 表名 character set 字符集;

修改某表名:例如将student表修改名字 为stu

rename table student to stu;

删除表 drop table 表名;

DML 数据操作:操作表中的数据

插入数据:insert into 表名(字段) values (值);

insert into stu(id,sname,birthday,grade,other) values(1,'zhang','1992-01-21',99.9,'三好学生');

发现插入中文会出现编码问题


编码问题怎么解决


 有一种临时更改字符集的方法:set character_set_client=gbk;执行完会这样


这时再插入就会成功了,但执行查询会出现乱码

怎么办?依旧是改字符集 set character_set_results=gbk;然后再查询就正常了

种方法只是临时改变了字符集,并不会对以后在成影响,重新运行mysql会发现依然都是utf-8

修改数据:update 表名 set 要改的内容 where 条件;若不加where则所有数据都会改变

一个简单的学生表为例,改了所有的sname字段

update stu set sname='aaa';

可同时修改多个字段,用逗号隔开

可执行算术运算

删除表数据:delete table 表名 where 条件;删除表中所有符合条件的数据

delete from stu where sname='wangwu';

truncate 表名;也能删除表,但它是摧毁整张表再重构表,而delete是逐条删除数据

DQL:数据查询

查询数据:select * from 表名;一般不建议这么写,效率低

select id,sname... from stu where...;建议这么写

select distinct grade from stu;distinct表去除重复数据(这个distinct 所修饰的需要写在第一个,不然会报错,我也不清楚什么原因...)

select sname as 姓名 from stu;这样查询结果sname列会显示为姓名,但这并不会更改原表中的字段名

where条件可加运算,可以做比较运算或逻辑运算等等

下面给出几个例子

select sname,grade+id from stu where grade>60;

seelct id from stu where grade between 5 and 80;分数在5到80之间

select id from stu where grade in(10,60,80);in代表在所规定的数据中

select id from stu where sname like '赵%';模糊查询

select id from stu where id=1 and sname like '李%';逻辑运算,and与 ,or或,is null 为空 

select * from stu where id>1 order by grade desc;order by为排序,desc是降序,asc或默认为升序

表约束、、、、、、

主键约束  create table mydb(id int primary key auto_increment); primary key 代表主键,非空且唯一 ,auto_increment代表自动增长

非空约束 create table mydb(id int not null);该字段不允许为空

唯一约束 create table mydb(id int unique);该字段值不可重复,非空和唯一结合即为主键约束

外键约束 

/////////////////////复杂些的查询

连接查询 : from 表1 连接类型(交叉,内连接,外连接)表2 [on 连接条件][where 查询条件];

1.交叉连接:笛卡尔积 ,假设 有a,b两个表 ,select a.name,b.num from a,b;或select a.name,b.num from a cross join b;可查出a*b条数据

2.内连接 :隐式内连接,不使用on,用where---------select * from customer c,orders o where c.id = o.id;

显示内连接,使用on-------------------select * from customer c inner join orders o on c.id = o.id;

3.外连接:左外连接,返回左表所有数据和右表符合连接条件的数据

select * from customer c left join orders o on c.id = o.customer_id;

右外连接,返回右表所有数据和左表符合连接条件的数据

select * from customer cright join orders o on c.id = o.customer_id;

嵌套查询:select * from orders where customer_id=(select id from customer where name='张三');

联合查询:union会查询表中符合条件的并集数据并去除重复

select * from orders where price>500 union select * from orders where customer_id=3;

报表查询:

select count(*) from orders where price>600;查询有几条满足条件的数据
select sum(price),sum(customer_id) from orders;查询列求和
select avg(price) from orders;求某列平均数
select max(price) from orders;求列最大值
select min(price) from orders;求列最小值

分组查询:group by ... having ...将数据归类并按having条件查询

select * from orders group by price having price>600 order by id desc;

数据备份:假如mydb库里新创建了一个test表,要如何备份到本地磁盘呢?

运行cmd到命令行直接执行mysqldump -u root -p mydb test>c:/test.sql回车输密码,这样就把mydb库中的test表数据保存到了c盘中,然后 我们可以进mydb中把这个表删除,再利用数据恢复 mysql -u root -p mydb<c:/test.sql ,这样再进mydb库就发现test表又回来了,要注意数据库名是不会保存的,所以该数据库名(mydb)必须存在。

还可以用mysqldump -u 用户名 -p --databases 库1 库2>路径   ,来备份多个数据库 

mysqldump -u 用户名 -p -all-databases > 路径  ,备份所有库

还有一种恢复数据的方式,这种需要先选择该数据库,就是use database;然后执行 source c:/test.sql; 路径自己换,会发现执行了一堆query ok,然后就发现数据也是恢复了。

0 0
原创粉丝点击