【数据库MySQL】
注数据库客户端工具区别
Sqlyod 用户数据的导入及导出
Navicat 能链接任意类型的数据库
Workbench 官方提供的客户端工具
***注意事项:在DOS命令行中往数据库下的table 表中插入中文字符的字段值
A、打开MySQL安装目录,找到my.ini文件,将[mysql]default-character-set=utf8;改成[mysql]default-character-set=gbk;
B、创建数据库,字符集设为utf8; create database if not exists dbl charset utf8;
C、使用数据库; use dbl;
D、创建表,字符集设为gbk; create table if not exists demo(
age int,
name varchar(50)
)charset gbk;
E、插入数据; insert into demo values(18,'张三')(19,'张无忌');
F、查询数据; select * from demo;
G、更新数据; update demo set name='张三丰' where age=18;
Auto_increment 设置自增
Default 数值 设置默认值
Primary key 设置主键 主键值不能重复
auto_increment 自动增长 自动增长必须要有索引key 字段类型必须为整数型
Unique唯一键
一、Dos命名
(1)net start mysql 启动mysql
(2)net stop mysql 关闭mysql
(3)mysql -h localhost -u root -proot 登录连接数据库 (完整格式)mysql.exe -h localhost -p3306 -u root -proot
(4)show databases; 显示所有数据库 show create database 数据库名字;显示数据库创建过程
(5)use (数据库名)mysql; 使用数据库
(6)show tables;显示数据库下所有的表
(7)select * from user\G; 格式显示查询user表下所有信息
(8)update user set password=password('1234')where user='root';修改user表,将root 用户的密码改成1234
(9)flush privileges; 刷新权限
(10)exit;/ quit;/ \q;退出(三种退出)
(11)?寻求帮助,如?show ;
二、数据库语言
(1)DDL 定义语言
*创建数据库 (格式):Create database 数据库名字 charset/character set 编码格式:如utf8
或CREATE DATABASE IF NOT EXISTS school;//IF NOT EXISTS 表示不存在再创建
*更新数据库 Alter database 数据库名字 charset gbk;
*删除数据库 Drop database 数据库名字;
*创建表方法一
use 数据库名;(表所在的数据库名)
create table if not exists 表名(
字段名 类型|属性|约束 索引 注释,
字段名 类型 索引 注释
)表类型|表选项;
例:use school
create table if not exists student(
name varchar(10),
gender varchar(10),
number varchar(10),
age int(4)
)charset utf8;
*创建表方法二
create table if not exists 数据库名.表名(
字段名 类型|属性|约束 索引 注释,
字段名 类型 索引 注释
)表类型|表选项;
*显示表
use 数据库名;(表所在的数据库名)
show tables;//显示当前数据库下所有表
show tables like '表名';//显示当前数据库下特定表
*显示查看表的创建过程
show create table 表名;
*显示表的结构
Desc/describe/show columns from 表名;
*修改表名
rename table 表名 to新表名;
*修改表选项
Alter table 表名 表选项 值; alter table student charset gbk;
*添加表字段
alter table 表名
add 字段名 属性|约束
位置(表头);
alter table my_student
add id int(10)
first;
*修改表字段属性
alter table 表名
modify 字段名 属性 位置;
列alter table my_student
modify name char(15)after id;
*修改字段名
alter table 表名
change 字段名 新字段名 属性|约束;
alter table my_student
change gender sex varchar(5);
*删除字段
alter table 表名
drop 字段名;
alter table my_student
drop ids;
*删除表
drop table 表名;
*插入字段内容(全部字段)
insert into 表名 values(全部字段值);
*插入字段内容(部分字段)
insert into 表名 (字段名) values(对应字段值);
*查询字段内容
select */字段名 from 表名 where 条件;(条件可选)
*更新数据
update 表名 set 字段名 =修改后的字段数据值 where 条件;
可以加 表名 between 从开始位 and 到结束位
*删除数据
如果不带where条件的删除表 自增当前值依然从原来的基础上进行
delete from 表名 where 条件;
删除表的全部数据 (慎用)
Truncate table 表名 ; 自增恢复到初始值重新开始
创建主键
1 Primary key 设置主键
2 在表最后设置主键 Primary key (字段值,字段值)
3 也可以在表外创建主键
Alter table 表名 add Primary key(要设置主键的值名);
删除主键
Alter table 表名 drop Primary key;
创建外键 foreign key,
- 外键要存在: 首先必须保证表的存储引擎是innodb(默认的存储引擎): 如果不是innodb存储引擎,那么外键可以创建成功,但是没有约束效果.
- 外键字段的字段类型(列类型)必须与父表的主键类型完全一致.
- 一张表中的外键名字不能重复.
- 增加外键的字段(数据已经存在),必须保证数据与父表主键要求对应.
创建表的时候增加外键: 在所有的表字段之后,使用foreign key(外键字段) references 外部表(主键字段)
在新增表之后增加外键: 修改表结构
Alter table 表名 add [constraint 外键名字] foreign key(外键字段) references 父表(主键字段my);
删除外键语法
Alter table 表名 drop foreign key 外键名; -- 一张表中可以有多个外键,但是名字不能相同
Unique key唯一键
1 Unique 在数值后设置唯一键
2 在表最后设置主键 Unique key (字段值,字段值)
也可以在表外创建主键
3 Alter table 表名 add Unique key (要设置主键的值名);
复制一个表 //注意两个表的结构要相同
Create table 新表名 like 要复制的表名; //复制旧表内的结构
Insert into 新表名 select * from 要复制的表名; //复制旧表内的内容
(2)DML 操作语言
(3)DQL 查询语言
Select distinct * from 表名 删除重复的数值
取别名
给表取别名 表名 as 别名
给字段取别名 字段名 as 别名
列:字段别名
Select id
number as学号
Name as 姓名
Sex 性别 from my_student;
查询条件
Select * from 表名 where 查询条件
where 查询条件
*比较运算符 > < = <> != >= <=
*逻辑运算符 and /&& /or/ ||/ not /between and / in / not in / like
列:
Select * from 表名 where height between 180 and 190;
Group by 分组
Group by:分组的意思, 根据某个字段进行分组(相同的放一组,不同的分到 不同的组
基本语法: group by 字段名
Group by 字段名
列:
Select * from my_student group by sex;
分组的意思: 是为了统计数据(按组统计: 按分组字段进行数据统计)
SQL提供了一系列统计函数
Count(): 统计分组后的记录数: 每一组有多少记录
Max(): 统计每组中最大的值
Min(): 统计最小值
Avg(): 统计平均值
Sum(): 统计和
order by 排序
Order by: 排序, 根据某个字段进行升序或者降序排序, 依赖校对集.
使用基本语法
Order by 字段名 [asc|desc]; -- asc是升序(默认的),desc是降序
多表连接查询
内连接
Select 需要查询的信息 from 表名 join 表名 on 条件
或者Select 需要查询的信息 from表名,表名 where 条件
列:SELECT my_student.name,age,my_class.name
FROM my_student
JOIN my_class
ON my_student.c_id = my_class.id;
外链接 左外连接
SELECT 要查询的信息 FROM 表名 LEFT JOIN 表名ON 条件
列:
SELECT c.name,c.age,s.name
FROM my_student AS c
LEFT JOIN my_class AS s
ON c.c_id =s.id;
右外链接用
SELECT 要查询的信息 FROM 表名 RIGHT JOIN 表名ON 条件
limit分页查询数据库
select * from 表名 limit [offset,] rows
一般是用于select语句中用以从结果集中拿出特定的一部分数据。
offset是偏移量,表示我们现在需要的数据是跳过多少行数据之后的,可以忽略;rows表示我们现在要拿多少行数据。
栗子:
①select * from mytbl limit 10000,100
上边SQL语句表示从表mytbl中拿数据,跳过10000行之后,拿100行
②select * from mytbl limit 0,100
表示从表mytbl拿数据,跳过0行之后,拿取100行
③select * from mytbl limit 100
这条SQL跟②的效果是完全一样的,表示拿前100条数据
用处:
我目前用到的地方是数据库查询分页,比如前台要展示数据库中数据,需要后台实现分页,传入数据要有“页码page”跟“每页数据条数nums”。
对应SQL大概是这样子:select * from mytbl order by id limit (page-1)*nums,nums
(4)DCL 控制语言
(5)其他语言
1使用mysqladmin命令修改root账户密码:
格式:mysqladmin -u用户名 -p旧密码 password 新密码
例子:mysqladmin -uroot -p123456 password 123
2使用SET命令修改用户密码
u 首先登录MySQL。
格式:mysql> set password for 用户名@localhost = password('新密码');
例子:mysql> set password for root@localhost = password('123');
3删除用户:
DROP USER student@localhost;
*%表示(0-n)任意个字符,_表示单个字符 通配符 例句:show databases like'my%';show databases like '__t%';
*\+特殊字符(如%..)转义字符
4、mysql服务器内部对象分为四层:
系统(DBMS)——>数据库(Database)——>数据表(Table)——>字段(Field)