mysql的配置
MySql默认的端口号是3306
默认字符集的设置
在mysql的安装目录,会看到my.ini文件!
my.ini文件介绍
01.default-character-set=utf8
设置客户端的字符集
02.character-set-server=utf8 设置服务器端的字符集
character-set-client=utf8 客户端发送的语句字符集
character-set-connection=utf8 设置服务器接收客户端语句的字符集
character-set-results=utf8 服务器将结果转换成对应字符集之后响应给客户端
同时设置字符集 client connection results
set names utf-8;
03.port
mysql的默认端口号是3306
04.basedir
数据库的安装位置
05.datadir
数据存放的位置
06.default-storage-engine
mysql的默认存储引擎
ps 如果修改了配置文件,需要重启mysql服务才会生效!
Utf-8是一种针对unicode的可变长度字符编码,又称为万国码。它是一种用于解决国际上字符不统一的一种编码格式,对英文使用8位(1字节),中文24位(3字节)来编码。包含了世界上所有国家需要的字符,是国际编码,通用性强!
配置mysql环境变量
01.复制mysql安装位置的bin目录
02.右键我的电脑===》属性===》高级系统设置===》环境变量===》把刚才复制的bin路径放入path变量中即可!
命令行连接MySql
ps 在windows操作系统中,命令不区分大小写!
01.win+R 输入 services.msc
02.找到mysql服务 右键点击开启
03.win+R 输入 cmd
04.进入命令窗口之后输入net start mysql 开启服务
05.net stop mysql 停止服务
连接mysql数据库
01.连接命令
Mysql -h 服务器主机地址 -u 用户名 -p密码
02.如果是本机操作,可以省略-h
03.-p之后也可以不写,密码!回车之后再输入密码
如果-p之后书写密码,则不需要有空格
Root用户连接mysql数据库
Mysql -u root -p密码
ps -p和密码之间不能有空格
查询mysql数据库的版本号以及当前登陆的用户
select version (),user();
MySql中数据库类型
1.用户数据库
用户根据需求自己创建的数据库!是我们研究的重点!
2.系统数据库
安装完mysql之后,默认附带的数据库
01.information_schema:存储了数据库对象的信息。如用户表信息,字段信息,权限信息,字符集信息和分区信息等。
02.performance_schema:存储了数据库服务器性能参数信息。
03.mysql:存储了系统的用户权限信息
04.test:数据库管理系统自动创建的测试数据库,任何用户都可以使用
SQL简介
什么是SQL
SQL的全称是(Structred Query Language)结构化查询语句。
01.1974年被提出,1980年改名为SQL
02.关系型数据库的标准语言
03.数据库脚本文件的扩展名
SQL的组成
01.DDL(Data Definition Language)数据定义语言。
用来创建数据库中的各种对象。如表,视图,索引,同义词等。
create drop truncate alter
02.DQL(Data Query Language)数据查询语言。
select where group by having order by
03.DML(Data Manipulation Language)数据操作语言。
Insert update delete
04.DCL(Data Control Language)数据控制语言。
grant revoke rollback commit
SQL中的运算符
01.算术运算符
+ 加法
- 减法
* 乘法
/ 除法
% 取余
02.赋值运算符
= 把=右边的值赋值给左边
03.比较运算符
> 大于
< 小于
<= 小于等于
>= 大于等于
<> 不等于
!= 不等于(不符合sql-92标准)
04.逻辑运算符
And 当两个表达式都为true,返回true
Or 当两个表达式有一个为true,返回true
Not 对表达式取反操作,优先级最高
使用DDL语句操作数据库
创建数据库
create database 数据库名称;
Query ok : 表示sql语句执行成功
1 row affected :表示影响的行数
0.00sec :表示执行时间
查询数据库列表
show databases;
选择数据库
use 数据库名称;
删除数据库
drop database 数据库名称;
创建用户
01.创建用户 只允许 本机 访问
create user `afei`@`%`identified by `afei`;
02.给用户授权
grant all privileges on*.*to ``afei@`localhost` ;
03.让权限立即生效
flush privileges;
使用DDL语句操作数据表
数据类型
01. 数值类型
tinyint(M) 1字节
smallint(M) 2字节
mediumint(M) 3字节
int(M,D) 4字节
float (M,D) 4字节
double (M,D) 8 字节
Decimal (M,D) M+2字节
M:总位数,取值范围是1-65,默认值10.
D:小数位,取值范围是0-30,不能超过M的值!
Tinyint,smallint,mediumint,int都是整数类型!
Float,double 都是浮点类型!
Decimal 是精度最高的数值类型!
薪水存储一般都是用decimal来存储,因为精确性高!
如果定义了一个字段的类型是decimal(3,1)
那么这个字段的取值返回是 -99.9 到 99.9
02. 字符串类型
Char(M) M字节 固定长度的字符串,M的取值返回是0-255
如果插入的数据字节数不够,空格补全!
如果插入的数据字节数超过了M,自动截取多余的字节!
Varchar(M) 可变长度 M的取值返回是0-65535
如果插入的数据字节数不够不需要补全!
如果插入的数据字节数超过了M,自动截取多余的字节!
Tinttext: 取值返回是0-255 微型文本串
Text :取值返回是0-65535 文本串
03. 日期类型
Date YYYY-MM-DD current_date这个函数可以获取当前系统的年月日
Datetime YY-MM-DD hh:mm:ss
Timestamp YY-MM-DD hh:mm:ss CURRENT_TIMESTAMP这个函数也是设置系统默认时间
Time hh:mm:ss
Year YYYY 得到年份
ps
如果一个字段是日期类型,那么任何符号都可以作为日期的分隔符
比如
2017-02-01
2017+02+01
2017/02/01
2017.02.01
等 都是可以正确给日期类型的字段赋值成功!
CURRENT_DATE 这个函数获取当前系统的年月日
CURRENT_TIMESTAMP 这个函数获取系统 年月日 时分秒
CURRENT_TIME 这个函数获取系统 时分秒
有需求是创建一个字段来记录某条信息的最近修改时间,
那么我们可以在创建表的时候,就定义为
字段名称 timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
意思是说,只要有人修改这条信息的时候,这条信息的这个日期字段就会自动更新!
Enum类型
# 创建一个student表
CREATE TABLE IF NOT EXISTS student(
id INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学生编号',
`name` VARCHAR(10) NOT NULL UNIQUE KEY COMMENT '学生姓名',
sex ENUM('男','女') DEFAULT '男' COMMENT '学生性别'
)ENGINE='InnoDB' DEFAULT CHARSET='utf8' COMMENT '学生表';
创建表
语法
Create table [if not exists] 表名(
字段名称 数据类型 [字段属性|约束 ] [索引] [注释],
字段名称 数据类型 [字段属性|约束 ] [索引] [注释]
)[表类型][表字符集][注释];
ps
01.如果创建的表名,字段等与数据库中的保留字冲突,建议使用 反引号(`)括起来!
Mysql自动生成的代码中,数据库,表名和字段都会使用 反引号(`)括起来!
02.DDL语句创建表的时候,多个字段之间使用逗号(,)隔开!最后一个字段无需逗号(,)
03. 单行注释 #
多行注释 /**/
04.表中的字段我们也称之为列
有符号类型 和 无符号类型
有符号类型 :可以取负值
无符号类型:默认是0! 0--类型的长度
ps
ZEROFILL属性:如果位数不够,前面用零补齐!
若某数值字段指定了ZEROFILL属性,
将自动添加UNSIGNED属性!
ZEROFILL属性:如果位数不够,前面用零补齐!
若某数值字段指定了ZEROFILL属性,
将自动添加UNSIGNED属性!
#创建一个student表
CREATE TABLE IF NOT EXISTS student(
id INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学生编号',
`name` VARCHAR(10) NOT NULL UNIQUE KEY COMMENT '学生姓名',
sex VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '学生性别'
)ENGINE='InnoDB' DEFAULT CHARSET='utf8' COMMENT '学生表';
# 新增字段
INSERT INTO student(id,`name`,sex) VALUES(10,'小白',DEFAULT);
INSERT INTO student(`name`,sex) VALUES('小黑',DEFAULT);
INSERT INTO student(`name`,sex) VALUES('小黑2',DEFAULT);
# 如果我们手动的更改了自动增长的列,那么下次自动增长的起点就变了
#增加一条数据
INSERT INTO student(`name`,sex) VALUES('小黑1',DEFAULT);
#增加多条数据
INSERT INTO student(`name`,sex)VALUES('小黑',DEFAULT),
('小黑2',DEFAULT),('小黑3',DEFAULT),('小黑4',DEFAULT);
查询表的定义
DESCRIBE student;
字段的约束
为了保证数据的完整性,mysql中提供了约束机制!
常用的属性约束:
1.非空约束 not null
字段不允许为空!
2.默认约束 default
给字段设置默认值
3.唯一约束 unique key(UK)
设置字段的值是唯一。的允许有空值,但只能有一个!
4.主键约束 primary key(PK)
设置表中记录的唯一标识!一个表中不允许重复!
5.外键约束 foreign key(FK)
用于两个表之间建立关联关系!
注意点:
01.InnoDB引擎支持外键,MYISAM引擎不支持!
02.外键只能建立在从表中!
6.自动增长 auto_increment
01.一般用于主键,默认自增1
02.是整数类型
03.可设置初始值和步长
表和字段的注释
Create table 表名(
字段1 类型 comment 注释内容,
字段2 类型 comment 注释内容
)comment=’表的注释内容’
表的引擎
Create table 表名(
字段1 类型 comment 注释内容,
字段2 类型 comment 注释内容
)engine=’表的引擎’
表的编码
Create table 表名(
字段1 类型 comment 注释内容,
字段2 类型 comment 注释内容
)charset=’表的编码格式’
查询表
show tables; describe 表名;
修改表
01.修改表名
Alter table 旧表名 rename [to] 新表名;
02.给表中添加字段
Alter table 表名 add 字段名 数据类型[属性];
03.修改表中的字段
Alter table 表名 change 原字段名 新字段名 数据类型[属性];
04.删除字段
Alter table 表名 drop 字段名;
05.添加主键约束
Alter table 表名 add constraint 主键名 primary key 表名(字段名);
复合主键
将多列设置成主键!
-- 给成绩表设置复合主键
ALTER TABLE result ADD PRIMARY KEY pk_result (studentno,subjectno,examdate);
06.添加外键约束
Alter table 表名 add constraint 外键名 foreign key (外键字段名) references 关联表名(关联字段);
如果 现在有 两个表 ,比如说 一个是 teacher 一个是 Student
两表存在主外键关系!那么 不能直接删除teacher表!哪怕删除teacher表中的数据
也要考虑student表中是否有和老师对应的数据!
删除表
Drop table [if exists]表名;
MySql系统帮助
Help 查询内容;