一.MySQL服务开关
方式一:
右键我的电脑->管理à服务和应用程序->服务 找到mysql 打开和关闭
services.msc 可以替代找到服务的过程 找到mysql 打开和关闭
方式二:
Net start mysql服务的名字
Net stop mysql服务的名字
二.服务器常用命令
1.进入服务器 mysql –u用户名 –p密码 –h空格访问的ip –P端口号(默认3306)
本机: localhost或127.0.0.1 不写 -h 默认本机 不写-P 默认3306
一般使用mysql –u用户名 –p 回车后 输入密码 这样 安全。
\c 当输入错误时 用\c不会报错
Dos窗口快捷设置本次编码 set names gbk;
2.常用的cmd窗口命令
查看服务器下有哪些库:show databases 注意information_schema 和mysql不要去动
添加一个库: create database 库名
删除一个库:drop database 库名
重命名一个库:不能
进入一个库:use 库名
查看当前库有哪些表:show tables
创建一个表:create table 表名(字段名1 类型, 字段名2 类型,……. 字段名n 类型)
示例:
create table student(
stuId smallInt,
age smallInt,
stuName varchar(20),
stuHeight float(3,2),
birthday datetime
)default charset=utf8
查看表的详细信息: desc 表名
删除表:drop table 表名
修改表名:rename table 老表名 to 新表名
给表添加一个字段: alter table 表名 add column 字段名 字段类型
更改字段的类型: alter table 表名 modify column 字段名 新类型
最简单的查询表内容: select * from 表名(存在当前库下) 全表全字段查询
往表里添加内容: insert into 表名 values(根据字段的顺序添加值)
修改表数据:update 表名 set columnName1=值1, columnName2=值2 where 条件判断
删除数据:delete from 表名 where 条件判断
示例代码:
插入
insert into 表名 (字段名1,字段名2,.....) values (值1,值2,值3,......);
insert into 表名 values (值1,值2,值3,......);//默认为所有的字段插入数据
insert into student values (3,18,'猪八戒',1.66,'2010-10-02 18:35:35');
insert into student(stuId,stuHeight) values(4,1.98);
查询
select * from 表名
select * from student;
告诉服务器编码方式:set names 编码集名
三.数据库数据类型
1.通用属性(极个别不能用):
Not null : 该列不允许不插入值,
Default: 当插入数据没有添加该列的值的时候的默认值.
Not null default 值: 当没有插入的该列的值,可以插入成功,值为默认值。
2.数值型:
整型:
类型 | 字节 | 位 | 范围(有符号,包含整数或负数) | 范围(无符号,都是不小0的数) |
Tinyint(M)unsigned zerofill | 1 | 8 | -128~127(-2^7~2^7-1) | 0-255(2^8-1) |
Smallint | 2 | 16 | -32768~32767 (-2^15~2^15-1) | 0-65535 (0~2^16-1) |
mediumint | 3 | 24 | 正负800多万(-2^23~2^23-1) | 正1600多万 (0~2^14-1) |
Int | 4 | 32 | 正负21E(-2^31~2^31-1) | 0~正42E多(0~2^32-1) |
Bigint | 8 | 64 | (-2^63~2^63-1) | (0~2^64-1) |
Tinyint讨论:
[0][0][0][0][0][0][0][0] à0
[1] [1] [1] [1] [1] [1] [1] [1] ->2^0+2^1+2^2….+2^7=255
最高位为符号位 剩余7个
-[1] [1] [1] [1] [1] [1] [1]~+ [1] [1] [1] [1] [1] [1] [1]
-(2^7-1)~+( 2^7-1) à-127~127à -128~127(正负0没意义,将多出来的空间给-128)
数据库的整型是有符号的。
Tinyint(M) unsigned zerofill
Unsigned使该列的值无符号。
(M)和zerofill 同时使用才有意义
浮点型:
类型 | 范围 | 字节数 |
Float(M,D) | 跟M和D有关系 | 4 |
Double(M,D) | 跟M和D有关系 | 8 |
M:精度 除去小数点,数字相加的和,限制float的范围。(及整数部分位数加小数部分位数总和)
D:标度 代表小数点后面的可容纳小数个数。(即小数位数 )
示例:Float(5,2) ->范围 有符号 -999.99 ~999.99 无符号0~999.99
特殊:
当float在定义的时候没有声明(M,D)时,在where 查询直接 用字段= float的值是查不到数据的,而要使用like去找。
(了解)在范围内,但是小数部分超过了标度的长度,标度的后一位会四舍五入。注意对5的处理,不入:0 1 3 5 7 入: 2 4 6 8 9
定点型:
类型 | 范围 | 字节数 |
Decimal(M,D) | 跟M和D有关系 | M+2 |
M和D 与float的意义一样。
不写(M,D) 默认 (10.0)
float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位)
double:双精度实型,含字节数为8,64bit数值范围-1.7E308~1.7E308(15个有效位)
decimal:数字型,128bit,不存在精度损失,常用于银行帐目计算。(28个有效位)
字符型:
类型 | 所占空间 | 宽度取值(M的取值范围) | 利用率 |
Char(M) | M个字符 | 0~255 | 小于等于100 |
Varchar(M) | 实际字符+1-2个字节 | 0~65535 | 小于100 |
速度上,char快于varchar.
M代表宽
Char 定长字符串
Varchar 变长字符串
Char 不写M默认1
Varchar不写M 会报错。
利用率:
宽度定义 M
实际传入 N
Char N/M N可以等于M 所以利用率可以达到100%
Varchar N/( N+(1+2)字节) N可以等于M 永远不能达到100%
关于选择使用:
四字成语字典,省份证, 朋友圈, 用户昵称
Char(4) Char(18) Varchar(150) char(6)可以,速度快,资源浪费较少 varchar(6)也可以,牺牲速度,节省资源。
时间类型:
类型 | 范围 |
Year | 1901-2155 |
Time | -838:59:59'到'838:59:59 |
Date | 1000-01-01~9999-12-31 |
Datetime | Date和Time结合 |
Timestamp | 1970-2037(了解,即将过期) |
四.常见约束
1.主键约束:primary
主键关键字:primary key
已建好的表的主键添加:alter table 表名 primary key(字段名)
将字段设置为主键alter table student add constraint PK_字段名 primaryKey(studentId);
2.非空约束:not null
3.默认值:default
为字段添加默认值:alert table 表名 modify 字段名 set default 默认值
建表的时候为字段添加默认值: 字段名 类型 default 默认值
4.唯一约束:unique
主键和唯一键的区别:1.主键不能为空 2.唯一键可以有多个,但主键只能有一个
5.自增::auto_increment
6.外键约束:
外键:foreign key
注意1.外键只能作用在另一个表的主键上 2.创建顺序只能先创建主表
alter table 外键表 add constraint FK_约束名 foreign key ([外键列]) references [主键表] ([主键列])
语法:foreign key(外键所在字段名) references 主表名(主表主键所在字段名)
删除外键:alter table 表名 drop foreign 外键名;
7.级联操作: on delete[update] cascade
示例:示例代码点击
8.置为null: on delete[update] set null
9.检查约束
检查约束使用 CHECK 关键字,具体的语法格式如下:
CHECK <表达式>
其中:<表达式>
指的就是 SQL 表达式,用于指定需要检查的限定条件。
若将 CHECK 约束子句置于表中某个列的定义之后,则这种约束也称为基于列的 CHECK 约束。
在更新表数据的时候,系统会检查更新后的数据行是否满足 CHECK 约束中的限定条件。MySQL 可以使用简单的表达式来实现 CHECK 约束,也允许使用复杂的表达式作为限定条件,例如在限定条件中加入子查询。
注意:若将 CHECK 约束子句置于所有列的定义以及主键约束和外键定义之后,则这种约束也称为基于表的 CHECK 约束。该约束可以同时对表中多个列设置限定条件
示例代码:
在 test_db 数据库中创建 tb_emp7 数据表,要求 salary 字段值大于 0 且小于 10000,输入的 SQL 语句和运行结果如下所示。
mysql> CREATE TABLE XXX
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT,
-> CHECK(salary>0 AND salary<100),
-> FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
-> );
在修改表时添加检查约束
修改表时设置检查约束的语法规则如下:
ALTER TABLE XXX ADD CONSTRAINT <检查约束名> CHECK(<检查约束>)
修改 tb_dept 数据表,要求 id 字段值大于 0,输入的 SQL 语句和运行结果如下所示。
mysql> ALTER TABLE XXX
-> ADD CONSTRAINT check_id
-> CHECK(id>0);
删除检查约束
修改表时删除检查约束的语法规则如下:
ALTER TABLE <数据表名> DROP CONSTRAINT <检查约束名>;