MySQL

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')

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容