Mysql入门

Mysql是学习的重点,这次先写一下mysql的操作,为php操作mysql做个准备....
首先,mysql具有五个基本单位,从大到小分别为:数据库服务器、数据库、数据表、数据字段、数据行,数据库服务器就是指用来运行数据库服务的电脑,也可能是多台电脑一起配合来进行存储或者计算,一个服务器里面可以有多个服务器用来存放不同种类的数据,比如装备数据库,物品数据库等等,而一个数据库就像一个excel表格一样,由多个数据表构成,而一个数据表又可以按照横竖划分为数据行和数据列(也叫数据字段),其中数据列划分该列应该存储什么样格式的数据,数据行是真正的数据,每一行都要遵照列的划分去存入数据。
  SQL是操作数据库的核心,所以要学会用SQL语句操作数据库,语句按照功能可以分为三种:
1.数据库定义语言语句:可以定义不同的数据库、数据表、数据段、数据行以及索引。常用关键字有create、drop、alter。
2.数据库操作语言语句:添加、删除、更新和查询数据库记录,并检查数据库的完整性。常用关键字有insert、delete、update、select。
3.数据库控制语言语句:控制不同的数据段直接的许可以及访问级别的语句。主要关键字有grant、revoke。
可以在命令行里面控制数据库:
1.连接数据库:
<code lang="mysql">mysql -h localhost -u root -p,其中h表示host,u表示user,p表示password</code>,其实如果进入了mysql命令行的话,就不需要mysql -h了。
2.创建数据库:CREATE DATABASE+数据库名,如果已经存在这个数据库就会报错
<code lang="mysql">CREATE DATABASE UID</code>
3.查看数据库:SHOW DATABASE,可以查看当前服务器的所有数据库
<code lang="mysql">SHOW DATABASE</code>
4.选中数据库:USE+数据库名,这样你就可以进入数据库中,使用该数据库。
<code lang="mysql">USE UID</code>
5.查看数据库中的表:SHOW TABLES
6.删除数据库:DROP DATABASE+数据库名,数据库删除之后,数据库里面的所有东西也会被删除,所以要做好备份。
<b>Mysql数据表操作</b>:
7.创建表:CREATE TABLE+表名(字段名1 字段类型1(字段长度),...,字段名n 字段类型n(字段长度),字段类型有int,float,char(字符),varchar(字符串)
<code lang="mysql">
CREATE TABLE STUDENT(
    UID int(8),
    USERNAME varchar(10),
    USERAGE int(3)
    USERBORTH date
);
</code>
8.查看表字段结构信息:desc+表名,可以查看表的结构。
9.查看表的创建SQL语句,查看表创建语句:SHOW CREATE TABLE+表明 \G;其中\G表示使记录可以按照字段竖着排列,对于内容比较长的记录更易于显示,在创建SQL语句中,除了可以看到表定义以外,还可以看到表的engine(存储引擎)、charset(字符集)等信息。
10.删除表:DROP TABLE+表名:删除表,表和数据都会丢失。
11.指定表引擎和字符集:在创建表的最后,我们常用MylSAM或者lnnoDB引擎。在指定引擎时,我们可以使用:ENGINE=lnnoDB;在指定表默认字符集时我们可以使用:DEFAULT CHARSET=utf8。
<b>Mysql数据字段操作(操作列)</b>:
12.修改表字段类型:alter table+表名+modify+字段名+varchar(20);如:
<code lang="mysql">alter table user modify username varchar(20)</code>,表示将user表的username字段改成varchar类型。
13.增加表字段:alter table+表名+add column+字段名+类型;如:
<code lang="mysql">alter table user add column age int(3)</code>;表示将user表增加一列age字段,字段类型为整形,但是这种增加字段会将字段添加在最后一列。
14.增加字段时控制字段顺序:其实就是加一个关键字,AFTER就是了,如:alter table user add column age int(3) after username;表示将age字段添加在username字段之后,字段类型为int型,长度为3.
15.删除表字段:alter table+表名+drop column+字段+类型,如:alter table user drop column age;表示将user表的age字段删除。
16.表字段改名:alter table+表名 change+字段原名+字段新名+字段新类型,如:alter table user change email em varchar(20);表示在user表中将字段中的email字段改成长度为20的varchar类型的字段,并且新的字段名为em。
17.修改表字段排列顺序:在前面所学的增加和修改语句中,最后都可以加一个可选项first|after,如:alter table user modify em varchar(60) first,这样就把em字段移动到了所有字段的最前面了。
18.修改表名:alter table+旧表名+rename+新表名,如:alter table user rename new_user,表示将表名由user改成new_user。
<b>Mysql数据类型</b>
Mysql数据类型:Mysql数据类型分为五种类型,分别是:数值类型、字符串类型、日期时间类型、复合类型、空间类型,而每个数据类型又可以详细划分:
1.数值类型,数值类型其实可以分为两种整形和浮点型,其中整形按照字节长短可以划分为tinyint(1byte)、smallint(2byte)、mediumint(3byte)、int(4byte)、bigint(8byte),浮点型也可以分为三种,分别是float(m,d)(4byte)、double(m,d)(8byte)、decimal(m,d),其中decimal叫做定点数,是存储为字符串的浮点数,如果是存在金额、钱精度较高的浮点存储,建议使用decimal这个类型。
2.字符类型,字符类型有很多种类型,比如CHAR(定长字符串)、VARCHAR(变长字符串)、TINYBLOB(不超过255个字符的二进制字符串)、BLOB(二进制形式的长文本数据)、TEXT(长文本数据)、MEDIUMBLOB(二进制形式的中等长度文本数据)、MEDUIUMTEXT(中等长度文本数据)、LONGBLOB(二进制形式的极大文本数据)、LONGTEXT(极大文本数据)、VARBINARY(M)(值的长度+1的字节)、BINARY(M)(允许长度0-M个字节的定长字节符串)。其中CHAR类型用于定长字符串,并且必须在圆括号内用一个大小修饰符来定义。比长度大的值将被截短,而比长度小的值将会用空格填补。VARCHAR把这个大小视作值的大小,长度不足的情况下就用空格补足。而VARCHAR类型把他视为最大值并且只是用存储字符串实际需要的长度。text和blob类型对于字段长度要求255个的情况下对于大型数据用于存储文本块或图像、声音等二进制数据类型。但是text和blob在分类和比较上存在区别,blob区分大小写,而text不区分。但是大小写修饰符却不用于他们的子类型。
3.时间类型有date(3byte)(格式:2018-07-25)、time(3byte)(格式:11:00:00)、datetime(8byte)(格式:2018-07-25 11:00:00)、timestamp(4byte)(自动存储记录修改的时间),year(1byte)(年份)。一般大家都喜欢用int来存储时间,插入时插入的unix时间戳,也可以用date函数,再将unix时间戳转成人们可识别的时间。
4.复合类型有集合类型(set)和枚举类型(enum),但是一个enum类型只允许从一个集合取得一个值;而set类型允许从一个集合中取得任意多个值。enum因为只允许在集合中取得一个值,有点类似于单选项,它可以从集合中取得一个值或者是null值,除此之外的输入会在这个字段中插入一个空字符串,如果插入值的大小写和集合中不匹配则会转化和集合中一致,enum类型在系统内部可以存储为数字,并且从1开始用数字坐索引。一个ENUM类型最多可以包含2^16个元素,其中一个元素被MySQL保留,用来存储错误信息,这个错误值用索引0或者一个空字符串表示。MySQL认为enum类型集合中出现的值是合法输入,初次之外其他任何输入都将失效。这说明通过搜索包含空字符串或者对应数字为0的行就可以很容易地找到错误记录的位置。与enum类型相同的是,任何试图在set类型字段中插入非预定义的值都会使MySQL插入一个字符串。如果插入一个既有合法元素又有非法元素的记录,MySQL会保留合法的元素,除去非法的元素,而且它还去除了重复的元素,如果要从set类型字段中找出非法的记录只需查找包含空字符串或二进制为0的行。
    到这里,所有的字符类型就全讲完了。不过还有一些字符类型的属性需要掌握一下,UNSIGNED(无符号)主要用于整型和浮点类型,使用无符号。即,没有前面的负号-(符号)。ZEROFILL(0填充)可以用来真补输出的值。使用这个修饰符可以阻止MySQL数据库存储赋值。default属性确保在没有任何值可用的情况下,赋予某个常量值,这个值必须是常量,因为MySQL不允许插入或者表达式值。此外,此属性无法用于BLOB或TEXT列。not null属性,如果将一个列定义为not null,将不允许向该列插入null值,一般在重要情况下始终使用not null属性,因为它提供了一个基本验证,确保已经向查询传递了所有必要的值。null属性,当列被指定为null属性时,该列可以表示为空,而不论行中其他列是否已经被填充,一般默认的属性都是NULL,而如果时其他属性则需要在创建语句的后面声明一下。
<b>字符集</b>
字符集就是对每种语言常用字符进行的不同的编码,常见编码如ASCII,GBK,unicode,utf-8,实际上我们一般使用gbk_chinese_ci(简体中文,不区分大小写),utf8_general_ci(Unicode,不区分大小写)。
<b>Mysql表引擎</b>
基于表的特点可以使用不同的引擎以达到最好的性能,以下是几种引擎:
MyISAM 常用。读取效率很高的引擎,表锁(表级锁,加锁会锁住整个表),支持全文索引,操作速度快,常用于读取多的业务,对于这个引擎,mysql数据库只会缓存索引,而数据文件的缓存由操作系统本身来完成。
lnnoDB 常用。写入、支持事务处理,行锁设计,支持外键,即默认情况下读取操作是不加锁的,是为了处理巨大数据量时的最大性能设计。事务即是同时操作多个数据,若其中一个数据操作失败,可回滚到操作前,常用于银行等系统中。
Archive 不常用。归档引擎,压缩比高达1:10,用于数据归档。
NDB 不常用。主要在MySQL集群服务器中使用。
<b>索引</b>
索引有四种:基本索引、唯一索引、主键索引、全文索引。
添加基本索引:alter table+表 add index(字段),为表的字段添加基本索引
添加唯一索引:alter table+表 add UNIQUE(字段),为表的字段添加唯一索引
添加主键索引:alter table+表 add PRIMARY KEY(字段),为表的字段添加主键索引
添加全局索引:alter table+表 add FULLTEXT(字段),为表的字段添加全局索引
创建表时也可以声明索引,代码如下:
<code lang="mysql">
CREATE TABLE test (
     id INT NOT NULL , 
     username VARCHAR(20) NOT NULL , 
     password INT NOT NULL , 
     content INT NOT NULL , 
     PRIMARY KEY (id), 
     INDEX pw (password), 
     UNIQUE (username),
     FULLTEXT (content)
 ) ENGINE = InnoDB;
</code>
<h1>DCL语句</h1>
<b>创建库用户</b>
添加权限
基本语法:grant 权限 on 库.表 to '用户'@'主机' identified by '密码'
<code lang="mysql">grant [all]select,insert on test.* to 'root'@'localhost' identified by ''
说明:给予root用户在test库里的所有表的select操作和insert操作的权限
删除权限
基本语法:revoke 权限 on 库.表/[..] from '用户'@'主机' identified by '密码'
<code lang="mysql">revoke select,insert on test.* from 'root'@'localhost' identified by ''</code>
说明:删除root用户在test库里所有表的select操作和insert操作的权限