-->mysql是什么?
mysql 数据库管理系统不数据进行管理和处理等......
->mysql的三层结构
->几个概念:
Database:s数据库
DBMS :数据库管理系统
数据的表现形式:
物理层面:二进制文件和文本文件,从db的角度来看
逻辑层面:从DBMS的角度来看,实际上是有行和列组成的一张二维表。
行:记录。
列:字段,列。
使用这种二维表来表示数据的数据库,称之为关系数据库,RDBMS
常见的RDBMS:
n Mysql,淘宝,新浪微博,百度,yahoo,google,facebook
n Sql server
n Oracle
n Access
n DB2
n Informix
n Sybase
NoSQL:非关系型的,键值对,mongod
sql:structured query language,结构化的查询语言,是一门用于数据库查询和设计的语言。
sql 还是一个标准。
数据的保存方式:
n 文件保存,少量的数据
n 数据库,专门处理大量的数据,还提供了各种文件系统不具备的一些功能。
—》基本命令
使用mysql要确保mysql的服务是开启的。
开启和关闭mysql服务的。
任务管理器
使用windows的管理中的任务,
使用网络命令,netstat -anb , net stop mysql , net start mysql
客户端和服务器端建立连接以及断开
需要验证三个参数:
主机:host;
用户:user;
密码:password
完整的写法:Mysql -host=localhost -user=root -password=1234abcd
localhost也可以使用127.0.0.1,如果是本机,host选项可以不写
短命令的写法:host -h,user -u,password -p
Mysql -uroot -p密码
-u 和用户名之间可以使用空格,也可以不用空格,host也一样。
-p 和密码之间的写法
退出:
Exit ,Quit,\q
—》数据库相关命令
查看数据库,show databases
创建数据库,create database 数据库名 charset 字符集(character set 可以简写为charset)
查看创建数据库的语句,show create database 数据库名
删除数据库:drop database 数据库名
我们经常需要做一种判断,如果库不存在则创建,
If not exists 或者 if exists
create database if not exists db1
—》sql语句规则
问题:书写sql语句需要注意什么?
标识符 的问题,通常情况下,建议使用英文和数字,下划线组合而成。不要跟关键字冲突。
常规情况下,标识符要遵循的规则,
如果加了反引号,则不受上面的限制。
而且,在mysql处理标识符的时候,都会儿自动加上反引号。
—》大小写
Mysql 关键字,函数名可以大写,也可以小写。
数据库、表和视图的名字由服务器系统决定,lnix下区分,而windows下不区分
数据列的名字不区分大小写
建议自己定义的标识符都用小写
—》语句结束符
Mysql以 ; 作为结束符的
—》注释
(#、 /**/、--空格)
表相关语句
在一个DBMS 当中,可以由n个数据库,
在数据库中,有n张表,数据时存在表中的。
表是由行和列组成的。
—》创建表
create table 表名(列声明1,列声明2,列声明n....)engnine=存储引擎 charset=字符集
其中列声明是比较重要的。
列声明:列名 列类型 列属性
注意,在创建表之前,先要选定库,use 库名,这个命令可以不加分号。
查看表:show tables
查看表结构:desc 表名
desc 此处的desc表示describe
—》查看表的数据:
Select 列1,列2,列3,.......from表名
如果要选择所有的列,可以使用*来代替 中间的列。
—》插入数据
Insert into 表名(字段列表)values(值列表)
注意:
字段列表和值列表要一一对应
如果是字符串,必须用单引号包含,双引号也可以,但是不推荐。(sql的标准书写Php的便利)
查看表的创建语句:show create table 表名
删除记录:Drop table 表名
更新记录:Update 表名 set 字段=值 where 条件
补充:
Mysql 的学习:
存储引擎
Mysql支持插件式的存储引擎,MyISAM,InnoDB
存储引擎是如何保存数据,处理数据。
保存方式不同:
Frm文件是存储引擎无关的,任何一种存储引擎都有这个文件。
InnoDB
数据和索引文件都保存在该共享文件中
处理方式不同:
Myisam安全性较低,但效率较高。
Innodb 安全性高,但效率低。安全性体现在支持外键和实物。
Mysql 默认的存储引擎是,在mysql 15.5版之前,myisam,之后的是innodb.
\s 可以查看Mysql的版本信息。
建议:尽量显示声明存储引擎,Engine=引擎;
字符集
字符集是什么?
每个字符,用一个对应的数值来表示,就形成了字符集。
A 65
B 66
520 -我爱你
Default Character set =字符集,简写方式charset = 字符集。
Ascii 128位,单字节
Iso-8859-1 ---->Latin1 西欧字符集,单字节,256
Gb2312----> 简体中文版,支持的中文不多,双字节
Gbk----> 双字节,中日韩
Utf8---> 可变,1个字节—Latin,2个字节---俄文,3个字节----中文
Unicode,统一码,万国码。
字节和字符的区别?
字符:文化符号,表示人类语言的最小的表义符号。不同的国家,名族,有不同的符号
字节:是一种存储单位。
Mysql 支持的字符集
MySQL对字符集的支持细化到四个层次:
Ø 服务器
Ø 数据库
Ø 表
Ø 连接
字符集的继承关系
如果在安装的时候没有指定字符集,在创建库的时候指定即可。我们还可以更改mysql的配置文件my.ini.改完重启即可。
建议,在创建表的时候指定。
关于中文乱码,在使用cmd窗口的时候,默认无法插入中文。Set names gbk.
问题:下面哪些会出现乱码
Latin—>GBK,
GBK->Latin1
GBKàUTF8
UTF8->GBK
校对集
校对集是针对库而言的,建库的时候使用。
对字符排序进行比较
一种字符集,对应有多种校对集,
Show collation
每一组的第一个是当前字符集的默认校对集
对于utf-8来说,默认的是utf8_general_ci,表示不区分大小写。
如果指定了字符集,没有指定校对集,则校对集使用默认校对集。
如果指定了校对集,没有指定字符集,则字符集使用该校对集对应的字符集。
列类型
在mysql中,只能保存简单的数据(标量数据)。
n 数值
n 字符串
n 日期时间
—》数值之整数
根据所表示范围的不同,可以分成以下几种
整型默认是有符号的,如果要声明为无符号的,则使用unsigned来声明。
关于整型的长度问题
n 对于一个整型类型的数据而言,只要确定了是哪一种(tinyint,smallint,int),我们就能知道其最大长度,所以无需额外的声明长度。
n 长度包含符号位
问题:如果我在定义整型列的时候,定义一个长度,会怎么办?
如果单纯的指定其长度,其实没有任何影响,更不不影响其表示范围。
有这么一种需求,需要数据列的位数是固定的。
00001
00010
00100
01000
10000
此时这个长度就派上用场了,但是要结合zerofill关键字一起使用才有效。
如何选择整型列:
能选择小就不选大的。
age tinyint unsigned
—》数值之小数
近似值:float,double
精确值:decimal
定义方式 float(M,D)
其中M表示总共有多少位,而D则表示小数的位数,注意,小数点不包括在内和符号位。
float和decimal区别
对于float而言,对一个数接近其最大表示范围时,开始不精确了。
而decimal则一直是精确的。
小数的范围,由M和D共同决定。有正负之分。
默认是有符号的,如果要声明无符号的,则使用unsigned,此时负数被去掉了,正数部分不变。注意和整型的区别。
如何选择小数:选择float还是decimal?
对于一些需要精确表示的,比如财务,科学,通常使用decimal。
—》字符串
Char和varchar
Char和varchar共同点:都是用来表示字符串的,声明的时候必须定义其长度。
不同点:
Char,是定长的,比如char(n),则会存储n个字符,如果插入的字符串长度小于n个,则会以空格填充。
如果大于n个,则会根据mysql的模式来处理,在严格模式下,拒绝插入,在宽松模式下,会截取然后插入。
Char表示的字符串个数,最多是255个。
Char在查询的时候,会自动去掉空格。可以通过一个配置让其显示。
set sql_mode ='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PAD_CHAR_TO_FULL_LENGTH
Varchar是变长的,varchar(n),则表示最多存储n个字符,如果插入的字符串长度小于n个,实际上是几个,就插入几个。如果大于n个,处理方式同上。
Varchar表示的字符串个数,依据字符集和行大小来确定,最多65532个字节。