Mysql
是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。它是一款免费开源、小型、关系型数据库管理系统。
为什么要用MySQL数据库?
MySQL是目前最受欢迎开源的SQL数据库管理系统,与其他的大型数据库Oracle、DB2、SQL Server等相比,MySQL虽然有它的不足之处,对于个人或中小型企业来说,MySQL的功能已经够用了,在性能与标准的取舍上,一直坚持性能优先的原则,成为了互联网行业非常流行的数据库软件之一。 MySQL又是开源软件,因此没有必要花大精力和大价钱去使用大型付费数据库管理系统了。
1.MySQL是开放源代码的数据库
2.MySQL的跨平台性
3.价格优势,MySQL的社区版本都是免费的,即使需要付费的附加功能价格也比其它数据库便宜。
登录流程
mysql -u root -p passwd:
use databases;( 使用数据库)
help
show databases;( 显示所有的数据库)
show tables;( 显示表)
1064 错误代码,语法错误
1045 登录错误 1007 创建同名的数据库时报错 1008 数据库不存在,删除数据库失败
show grants;( 显示用户可以对服务器有哪些权限)
show stataus;( 用于显示广泛的服务器状态信息)
库:保存有组织的数据的容器
表:某种特定类型数据的结构化清单,包含数据库中所存数据的数据库对象,有行和列组成。
注:同一个数据库中不能有两个同名的表,在不同的数据库中可以存在名字相同的表。
列:表中每列成为一个字段。
数据类型:所允许的数据的类型。每个表列都有相应的数据类型,它限制该列表中存储的数据。
行:表中的一个记录。
主键:唯一标识表中每行的这个列。(辨别某一东西的唯一标识) 表中主键满足的条件: * 任意两行都不具有相同的主键值; * 每个行都必须有一个主键值,主键值不允许null值。 主键最好的习惯: * 不更新主键列中的值; * 不重用主键列的值; * 不在主键列中使用可能会更改的值。
创建数据库 | |
---|---|
创建: | CREATE DATABASE XXXX charset =(等号可以省) ‘utf8’; |
查看创建过的数据库 : | SHOW CREATE DATABASE XXXX; |
删除数据库 | DROP DATABASE XXXX; |
创建已经存在的数据库 | CREATE DATBASE IF NOT EXISTS XXXX;(不会报错, 会给一个警示) DROP DATABASE IF EXISTS XXXX; |
创建一个学生信息表
CREATE table students(
id int auto_increment comment '主键',
name varchar(50) not null comment '姓名',
age int not null comment '年龄',
sex char(2) not null comment '性别',
primary key (id)
) comment '学生信息';
查看创建的表信息 | SHOW CREATE TABLE students; |
---|---|
插入单条 | insert into 表名(属性,,) values('','',''); INSERT INTO students values(1504000,'小米',23,'女'); |
插入单条 | insert into 表名(属性,,) values(" "," "," "), (' ',' ',' '), (' ',' ',' ') |
添加完查看 | SELECT * FROM students; |
查看表结构 | DESC students; |
删除表 | DELETE FROM 表名;& TRUNCATE 表名; |
修改表名
rename table 表名1 to 表名2;
增加/删除列
alter table 表名 add 属性 类型 约束条件;
alter table custmers add phone int(11) not null first;
alter table custmers add phone int(11) not null after phone;
alter table 表名 drop column 属性;
修改字段信息:
alter table 表名 modify 属性 类型 约束条件;(修改某一列)
alter table students change name new_name varchar(5) not null;
alter table students modify sex char(2) firt;
update 表名 set email = 'abdc123@163.com' where id = 5;(修改某一行)
删除列/行
delete from 表名 where id = '5';(行)
alter table 表名 drop column phone;(列)
查找:
select * from students;
select name from 表名 where place like '北京%';
select count(*) from 表名;
select count(*) from 表名 where place like '北京%';
修改引擎
alter table 表名 engine = MyISAM;
MySQL数据类型
数据类型是数据的一种属性,其中包括整数型、浮点型、日期和时间类型、字符串类型和二进制数据类型。
整数类型
整数类型 | 取值范围 |
---|---|
INYINT | -128~127 |
SMALLINT | -32768~32767 |
MEDIUMINT | -8388608~8388607 |
INT | -2147483648~2147483647 |
INTEGRE | -2147483648~2147483647 |
BIGINT | ~ |
日期时间
类型 | 范围 |
---|---|
YEAR | 1901~2155 |
DATE | 1000-01~9999-12-31 |
TIME | -839:59:59~839:59:59 |
DATETIME | 1000-01 00:00:00~9999-12-31 23:59:59 |
字符串 字符串类型是在数据库中存储字符串的字符类型。
char类型的长度是固定的,长度可以在0~255的任意值。
varchar类型的长度是可变的。
注意:如果char和varchar的长度是5,插入的值的长度超过5系统就会报错(1406)。
检索单个列
例:select name from badboy;
结束SQL语句,多条SQL语句必须以分号(;)分隔 关键字大写,所有列和表名使用小写
检索多个列
例:select name,age,id from badboy;
select concat (name,id) from badboy;两个字符段在一格中出现 concat相当于join
检索所有列
select * from 表名;
检索不同的行
select distinct age from badboy;(去重)
分页
select name from badboy limit 5;显示表中的5行
select name from students limit10,10;
limit 4 offset 3 (从行3开始取4行) = limit 3,4
使用完全限定的表名
select [badboy.name](http://badboy.name) from stu_220.badboy;
排序(order by)
select name, age from students order by age asc;
select name,age from students order by age desc;
select id, name from students order by age,name;
selcet name,age from students order by age desc, name;
select name,age birthday from students where sex='女' and age >25 order by birthday desc;
where 字句
selcet name from students where age > 20;
selcet name from students where age > 20 order by age;(order字句应放在where字句后)
不等于: <>/!= selcet name from students where age<>20;
between语句
select name,upname from students where upname regexp '^[a-f]';
select name,age from students where age between 18 and 20;
and操作符
select name,age,place from students where age < 20 and place like '山西%';
or操作符
select name, age from students where age=19 or age=20;
IN select name,age form students where age in (19,20);
select name,age form students where age between 18 and 19;
select name,age form students where age>=18 and age <=19;
in操作符一般比or操作符清单执行更快 in的做大优点是可以包含其他select语句,使得能够更动态地建立where语句
三范式:
1NF, 第一范式
字段不能再分,就满足第一范式。
-- 2NF, 第二范式
每个表要有主键约束
满足第一范式的前提下,不能出现部分依赖。
消除符合主键就可以避免部分依赖。增加单列关键字。
-- 3NF, 第三范式
满足第二范式的前提下,不能出现传递依赖。
某个字段依赖于主键,而有其他字段依赖于该字段。这就是传递依赖。
将一个实体信息的数据放在一个表内实现。
TRUNCATE
TRUNCATE [TABLE] tbl_name
清空数据
删除重建表
区别:
1,truncate 是删除表再创建,delete 是逐条删除
2,truncate 重置auto_increment的值。而delete不会
3,truncate 不知道删除了几条,而delete知道。
mysql函数与条件判断函数
数学函数
name desc
ABS(X) 返回X的绝对值
MOD(X,Y) 返回X被Y除后的余数。
FLOOR(X) 返回不大于X的最大整数值。
CEILING(X) 返回不小于X的最小整数值
ROUND(X) 返回参数X的四舍五入的一个整数。
TRUNCATE(X,Y) 返回X中小数点Y位后面的数
字符串函数
name desc
LENGTH(str) 返回字符串str的长度。
CONCAT(str1,str2,...) 返回来自于参数连结的字符串。如果任何参数是NULL,返回NULL。可以有超过2个的参数。一个数字参数被变换为等价的字符串形式。
TRIM(str) 删除字符串两侧的空格。
REPLACE(str,s1,s2) 字符串str中所有出的s1字符串由s2代替。
SUBSTRING(str,pos,len) 从字符串str的起始位置pos返回一个长度未len的子串。
REVERSE(str) 返回字符串反转顺序后的结果。
LOCATE(substr,str) 返回子串substr在字符串str第一个出现的位置(起始位置)
--#### 时间日期函数
now(), current_timestamp(); -- 当前日期时间
current_date(); -- 当前日期
current_time(); -- 当前时间
date('yyyy-mm-dd hh:ii:ss'); -- 获取日期部分
time('yyyy-mm-dd hh:ii:ss'); -- 获取时间部分
date_format('yyyy-mm-dd hh:ii:ss', '%d %y %a %d %m %b %j'); -- 格式化时间
unix_timestamp(); -- 获得unix时间戳
from_unixtime(); -- 从时间戳获得时间
条件判断函数
name desc exprote
IF(expr1,expr2,expr3) 如果 expr1 是TRUE 则返回 expr2,否则返回expr3 SELECT IF(age>30,1,0) FROM studentinfo;
IFNULL(v1,v2) 如果v1不为NULL则返回v1,否则返回v2 select IFNULL(phonenum,'123') as phone FROM studentinfo;
CASE value WHEN 条件 THEN 结果END 如果value的值满足WHERE后面的条件,则返回THEN后面的结果,否则返回ELSE后面的结果 SELECT student_name,CASE WHEN age>50 THEN age ELSE 0 END FROM studentinfo;
加密函数
name desc exprote
PASSWORD(str) 函数可以对字符串str进行加密。一般情况下,PASSWORD(str)函数主要是用来给用户的密码加密的。 SELECT PASSWORD('abcd');
MD5(str) MD5(str)函数可以对字符串str进行加密。MD5(str)函数主要对普通的数据进行加密。 SELECT MD5('abc')