当前位置:首页>软件介绍>MySQL学习分享 查询:
     
MySQL学习分享

        进入mysql 命令操作行的命令:

        1、首先在系统环境变量中写入mysql安装目录中bin文件的路径;

        2、打开cmd,写:mysql -h服务器地址(本地:localhost) -P端口号(默认3306) -u用户名(默认:root) -p密码

        1创建数据库

        create datebase `db_name`[字符选项,字符校对选项];

        注意:

        1、数据库名的命名方式(汉字也可以),最好加上反引号“``”,建议

        表名也加上。

        2、所有语句以“;”结尾,还可以用G来结尾(简单的图形化界面),

        两者的显示格式不同。

        3、数据库创建完成后会生成一个.org文件,里面存储数据库创建时的

        配置内容(如:字符类型等)。

        2查看当前存在数据库:

        show datebases;

        3查看某个数据库的创建语句:

        show create datebase `db_name`;

        4数据库删除(慎用,不可逆):

        drop database `db_name`;

        5修改数据库信息:

        Alert database `db_name` character set gbk;(修改字符类型)

        6更改数据库名:

        可以直接修改数据库的文件夹的名称(不通用,不推荐)。

        还可以将书库中的内容重新导入到新建的数据库中,来实现改名,然后再删除原来的数据库(注意:一定要先确定数据已经完全导入,在删除旧的数据库)。

        7数据库用户名和密码的修改:

        1.用root 进入mysql后

        mysql>set password =password('你的密码');

        mysql>flush privileges;

        2.使用GRANT语句

        mysql>grant all on *.* to 'root'@'localhost' IDENTIFIED BY '你的密码'with grant option ; mysql>flush privileges;

        3.进入mysql库修改user表

        mysql>use mysql;

        mysql>update user set password=password('你的密码') where user='root'; mysql>flush privileges;

        表的相关操作:

        1、创建表(创建表一定要指定所属的数据库,可以用“数据库.表”来指定所属数据库):

        Create table `database`.table_name (

        字段名 数据类型(长度) [约束条件],字段名 数据类型(长度) [约束条件],........

        ) character set utf8 engine InnoDB;

        也可以在操作表之前打开一个数据库,这样建立的表就会默认建立在打开的表

        中,但同样可以在打开一个数据库的情况下用上述方法给其他数据库创建表。

        表的存储引擎(engine):

        

        InnoDB与myisam的区别:

        Myisam:一个表三个文件,table_name.frm 结构文件 ,table_name.myd 数据文件,table_name.myi索引文件。

        InnoDB:一个表一个文件,table_name.frm,所有的innodb文件都使用相同的数据存储空间来存储数据和索引打开数据库的命令:

        Use `db_name`;

        2、查看数据表:

        查看某个数据库中现有的表:

        Use db_name;

        Show tables ;

        要查询某一个表:

        Show tables like ‘%(部分表名)%’; (%是通配符,); Like同样适用于查找数据库。

        查看数据表的创建命令:

        Show craete table `table_name`;

        3、查看表结构:

        Describe table_name;或者简写:desc table_name;

        4、删除表:

        Drop table `table_name`;

        如果表存在则删除(if 语句判断):

        Drop table if exists `table_name`;

        5、修改表

        修改表名:

        Rename table `table_name` to `new_name `;

        此语句支持多个表名同时修改(用逗号隔开):

        Rename table `table_name1` to `new_name`,`table_name2` to `new_name2`,........;

        支持夸数据库重命名操作:

        Rename table `table_name` to `db_name`.`new_name`; (这样可以将表从一个数据库中移动到另一个数据库中,并将表名修改。能实现表的移动,或将一个数据库中的表全部表移动到新建的数据库中,实现数据库的重命名)。 表中字段的(增、删、改):

        这一上级命令之后进行操作。 都在:alert table `table_name`

        增:

        Alert table `table_name` add 字段名 数据类型;

        删:

        Alert table `table_name` drop 字段名;

        改:

        Alert table `table_name` modify 字段名 int(40);

        字段重命名:

        Alert table `table_name` change 字段名 新字段名 数据类型; 修改表选项:

        Alert table `table_name` 新的选项;

        数据操作:

        数据的增、删、改、查:

        插入数据:

        Insert into `table_name` (字段名,字段名.......) values (对应值,对应值.......);

        注:可以 或

        Insert into ‘table_name’ set 字段名=’值’,字段名=‘值’„„

        可以单独插入某个字段,则没有插入数据的字段为空(NULL)。

        如果插入时数据主键或唯一索引发生冲突时,进行强制插入(即更新):

        Insert into ‘table_n’ (key,field_1,field_2) values (value_1,value_2,value_3) on duplicate key update field_1=value_2,field_2=value_3;

        使用select 查询语句的结果作为数据源来进行插入(要求字段数量和类型一致):

        Insert into `table_name` (field_1,field_2) select field_1,field_2 from `table_name` ; 获得数据(查询数据):

        Select 字段列表 from `表名` [查询条件];

        如果不希望获得重复的数据信息(所有字段都重复而不是部分字段重复)可用distinct: Select distinct 字段表 from `表名` [查询条件];

        注:“*”可以用来表示所有的字段,查询条件如果默认不写或者用 where 1 来表示,则将查询出所有的数据。

        数据排序:

        Order by 字段1,字段2,„„ asc(从小到大)|desc(从大到小) Limit用法:用于限制查找的记录的数量和位置。

        格式:limit offset ,rowcount; offset :偏移量(开始的位置),rowcount:要取得条数; 当limit后只有一个参数时,表示条数。

        删除数据:

        Delete from `表名` 条件;(在删除操作中,条件显得尤为重要,一定要在逻辑上是严格控制条件。)

        修改数据:

        Update 表名 set 字段名=值 [条件]; (条件同样很重要)

        查看mysql 中所有的变量:

        Show variables;

        查看字符集有关变量:

        Show variables like ‘character_set%’;

        校对规则:是指当前字符集中,字符之间进行比较与排序的规则(在设置字符集的时候可以更改当前字符集的校对规则,如果不设置,每种字符集都有其默认的校对规则)。

        区_校对规则 格式: 字符集_地

        Cs :表示区分大小写;ci: 表示不区分大小写;bin: 以二进制形式进行比较;

        显示所有校对规则的命令:show collation;

        数据类型:(整型,小数型,日期时间型)

        整型:

        

        例:

        Create table `name` (

        Name int(4) unsigned

        )

        表示name字段为int型,最小显示位数为4位,如果不够用前导零来补齐,没有正负数,默认是有的。

        小数型:

        

        浮点数:

        小数型在数据库中的存储方式:

        分为精度和范围两个部分,例如:123456.23452453的存储方式为一部分空间来

        存储精度(0.12345623452453),另一部分空间来存储范围*10^8,但只存储指数8,所以每个小数都是经过计算取出来的,也因此会出现精度丢失的问题。

        Float(单精度):默认精度范围6位左右

        Double(双精度):默认精度范围16位左右

        小数型更通用的定义方式:

        Float/double (m,n) m:表示总的数值位数(不包括小数点和正负号);n:表示小数点后最大的数值位数。如果所插入的数的范围超过了规定范围,数据无法插入。

        支持科学记数法:123.456 表示为: 0.123456E3

        定点数:

        以九位数为四个字节进行存储,将数值原样存储,防止精度丢失。

        同样支持显示位数的规定 decimal(m,n) m:数值总长默认是10,n:小数部分长度默认是0;但当存入的数的长度超过规定时会进行四舍五入存储。

        时间日期型:

        

        Datetime (年月日时分秒) date (年月日) timestamp(时间戳)

        例:

        Create table `time1` (

        a datetime,

        b timestamp

        );

        Insert into `time1` values (‘2015-01-24 10:44:14’,’2015-01-26’);

        Mysql支持任何符号的分隔符,没有分割符同样可以识别。Timestamp类型的在检索时可以在其字段后加“+0”,则显示为时间戳形式的。

        当插入的时间年份为后两位时则按70-69的轮回进行19与20世纪的区分(当后两位为0-69时,世纪为20,当后两位为70-99时,世纪为19)。

        当插入的数据为Insert into `time1` values (0,0);时,mysql自动将时间存成0000-00-00

        00:00:00时间。

        Time 类型不仅可以表示时间点,还可以表示时间段(过去和现在都可以)格式:d tt:mm:ss d:表示天数,但提取数据时则是将天全部换为时分秒来表示,天数范围是正负34.9天。

        例:create table `t_1` (

        Ago time

        );

        Insert into `t_1` values (‘20 03:24:45’);

        显示结果:

        

        Year:存储空间为一个字节,只能表示255个年份:范围是从1901-2055年;

        字符串类型:

        

        Char(m)固定长度 m:表示严格的固定长度的字符数而不是字节数

        Varchar(m)可变长度 m:表示允许的最大字符长度字符数而不是字节数

        注:但总的字符的字节长度不能超过每种类型的最大长度,varchar 还要有1到2个字节来存储字节长度,当长度大于255时则需要用两个字节来存储长度,还需要一个字节来存储当前纪录中所有字段的unll类型的个数,因此实际的最大存储长度为65533到65532。

        Null该类型在记录中进行统一管理,而不是每个字段都有各自管理空间。

        Enum :枚举类型(单选):可以用来记录性别等,单选类记录。

        例:create table `enum1` (

        Sex enum (‘famale’,’male’)

        )

        Insert into `enum1` values (‘famale’); 演示结果:

        

        Set :(多选类型内存中以二进制形式进行存储) 例:create table set1 (

        Hobby set(‘basketball’,’baseball’,’football’) )

        Insert into set1 values (‘basketball’,’football’);

        演示结果:

        

        字段类型选择的一些原则:

        1、尽量精确。

        2、考虑应用语言处理。

        3、考虑兼容性。

        字段属性:

        是否为空(NULLNOT NULL):是否允许值为空,默认可以为空。

        Default(默认值):党委有输入数据时该字段的默认值,默认值必须是固定值。

        主键(primary key):可以用来唯一标识某条记录的字段或字段的集合,就是主键。

        主键可以是具体的(字段)实体属性,但最好的解决方案是:用一个与实体不相关的属性来作为唯一的标识。

        主键不能为空,不能为NULL不能重复。

        通常每个表都应该有一主键,并最好用与实体没有联系的可以唯一标识每个记录的字段来实现。

        定义方法:

        方法一:

        例:create table key1(

        Id tinyint primary key,

        Name varchar

        )

        方法二:

        该方法可以定义组合主键(一个主键里有多个值,而不是每个值都是主键)。

        例:create table key2(

        Id tinyint ,

        Name varchar,

        Class varchar,

        Primary key (name,class)

        )

        自动增长(auto_increment):

        通常用于主键的自动增长,来确保主键不重复。

        要求:该字段必须是整型,要有索引(系统会认为主键也是一个索引)。

        在插入时,该字段可以插入NULL,也可以不插入。

        例:

        create table key2(

        Id tinyint auto_increment ,

        Name varchar,

        Class varchar,

        Primary key (name,class)

        )

        自动增长的初始值是可以设置的:

        例:

        Alter table key2 auto_increment 10;设置初始值为10。 如果初始值小于已经存在的值,则按照记录中最大的值加一。 该字段的值依旧可以更新,但如果是主键,则不能有重复。

        表之间的关联:

        一对一关系:

        两个表之间的主键存在一一对应关系。

        设计:讲一个很多字段的表进行垂直分割,通常是将常用信息与不常用信息进行分割,然后设置主键一一对应。

        一对多关系:

        一个实体对应多个其他实体,例如:一个班级对应多个学生。

        4 设计:再多的那端增加一个字段,用于指向该实体所属的少的实体。 多对多关系: 多个实体对应多个实体。

        设计:利用一个中间表,表示实体之间的对应关系。

        中间表的一个记录表示一个关系。

        多对多就是由两个一对多来实现的。

        例:

        讲师主键 讲师 班级主键 班级号

        a 王 01 Php01

        b 李 02 Php02

        班级主键 讲师主键

        01 a

        02 a

        02 b

        外键:

        如果A实体的某个字段指向B实体的主键,那么就称A实体的这个字段为B实体的外键。

        被指向的实体成为主实体(主表),也叫父实体(父表)。负责指向的实体称为从实体(从表),也叫子实体(子表)。

        作用:

        用于约束处于关系中的实体,当增加子表的记录时是否有与之对应的父表记录,在删除或者更新主表记录时,子表中的记录信息应该如何改变。

        外键的删除与修改:

        删除:

        Alter table table_name drop foreign key foreign key_name;

        Foreign key_name:

        

        删除后再添加:

        Alter table table_name add foreign key (字段) 主表(字段);

        设置级联操作:

        在主表数据发生变化时从表的数据应该如何改变。

        主表更新:使用字段 on update

        主表删除:使用字段 on delete

        允许的级联动作:

        Cascade :关联操作,如果主表发生该表,从表也会执行相应的操作。

        Set null: 设置外键为null ,表示从表不指向主表的任何字段。

        Restrict:拒绝主表的相关操作。

        连和查询(union):

        将多条select语句合并到一起的操作,并将查询结果一起显示。

        用法:(select 语句„)union(select 语句„)union(select 语句„);

        子句结果的排序:

        1、子句必须包含在()内,

        2、子句的order by 必须在配合limit 的情况下才能生效,原因是union在做子句时会对没有Limit的子句进行优化(忽略)。

        3、多个select 语句检索到的字段数必须是一致的,结果的字段名称由第一个

        select语句中的字段决定。

        4、在最后的括号外加order by 对所有记录进行整体的排序。

        5、对应字段的数据类型必须相同(如果不同,mysql内部会做类型转换处理)。

        一般应用场景:

        获得数据的逻辑条件出现冲突,或者很难在一个逻辑内表示,就可以拆分成两个逻辑条件,分别查找,然后再将结果进行合并。

        子查询(查询语句的嵌套):

        Select xxx from xxx where in ( select xxx from xxx where);

        分类:返回值不同(单一值,一列,多列,表);出现位置:where 后;from 后;exists型。

        常用操作运算符: =,>,<,>=,<=,in,not in,some(集合或列)any(集合或列),=any(集合或列),all(集合或列),!=all(集合或列)。

        !=any(集合):不等于子集合中的某些即可,也就是说得到的结果,可以有与子查询结果一样的元素,但一定要有不一样的。

        !=all(集合):不等于子集合中的所欲元素,不能有相同的元素存在。

        Some与any的用法一样。

        行子查询:

        Select 字段,字段,字段 from 表 where (字段,字段)=(select 字段,字段,字段 from 表 where 字段=值 字段=值 limit 1);

        此格式用于将一行数据作为子查询语句,或查询条件来查询。通过创建行,并将子查询的结果作为行的值为查询条件。

        表子查询:

        Select from (select 字段 ,字段,字段 from 表 where 条件) as 自定义表名 where 条件;

        此句中,子句的查询结果是一个表,所以放在from子句中,并且还应给以其再定义一个表名(用as语句)。

        Exits子查询:

        Select 字段,字段 from 表1 where exits (select 字段 from 表2 where 条件);

        Exits后的子查询为真则返回查询结果,为假则不反回。

        Exits 查询方法可以用其他的方法代替,比如in 只是思维逻辑不同。

        链接查询:

        当一个业务需要多个表,多个表需要一起使用,需要将多个表连接起来。

        思路:将多个表通过某种关系连接起来,再进行筛选。

        链接分类:内链接,外链接,自然链接。

        内链接: 数据内部的链接,要求,要链接的数据必须全部存在才能实现链接。

        语法:select 字段 from left_table inner join right_table on 链接信息;

        例:select 字段 from t_table inner join c_table on t_id=c_id;

        拓展语法:select 字段 from left_table inner join right_table on 链接信息 where 条件;(标准写法)

        select 字段 from Left_table inner join right_table where 连接信息 and 条件;(过滤式写法)

        select 字段 from Left_table inner join right_table where 连接信息 and 条件;

        条件分类:

        Where :数据过滤,先进行数据的交叉连接,然后根据条件进行过滤。

        On:在链接是直接对数据进行判断。

        Using:要求负责链接的连个字段的名称必须一致。

        例:select 字段 from left_table inner join right_table using (两表相同的字段);

        链接处理:内链接在连接时可以省略链接条件,这意味着,所有左表的数据都要与右表的数据做一个链接,因此存在M*N个链接记录,这种连接称之为交叉连接,或者笛卡儿积链接。此时可以用cross join代替inner join。在mysql中inner join链接是默认的链接,因此可以省略inner join 。

        表的别名:用as来实现,database.table.字段 as xx; 这样可以使代码更加的简洁友好,简化SQL语句。

        外链接(分为:左链接,右链接):与内链接相似,但不必所有数据都存在,将不存在对应信息的字段用NULL 表示。

        语法:left_table left out join right_table on 链接信息(必须有);

        外链接的条件不支持where 可以使用using和on。

        Using :得到的结果中using中的字段只保留主表的。

        左链接:在连接时如果出现左边表数据连接不到右边表的数据,则保留左边表的数据,右边表数据用NULL代替,如果右边表的数据连接不到左边表的数据,则右边表数据被丢弃。

        union来模拟: 全外链接:mysql不支持全外链接,但是可以用

        (select * from left_table left join right_table on xxx=xxx)union (select * from left_table right join right_table on xxx=xxx)

        注:内链接不写条件就是交叉连接,外链接不写条件则语法错误。

        自然链接:

        Mysql 通过自己的判断进行连接,不需要写任何的链接条件,mysql会根据多表中的相同字段进行连接。

        自然链接分为内链接和外链接。

        内链接:nature join

        外链接:左外链接:nature left join ;右外链接nature right join

        自然链接其结果相当于:条件用using 查询的inner join 和 left/right join;

        多表链接:

        例:Select s.* ,sd.* from class left as c left join student as s on c.id=s.c_id left join student_detail

        as sd on s.id =sd.s_id where c.c_name=’计1323’;

        数据的备份与导出:

        语法:select xxx into outfile ‘d:/file1/file2/file_name’ from xxx where 条件;

        注:存储的路径一定要存在,文件名自定义,可以自动创建新的文件,但是不能覆盖或重写已存在的文件。

        生成的文件格式:为了满足某种需求,mysql支持多种类型的字段数据分割方式,并可字段被什么包裹 字段以什么结束 以自行设置。

        语法(默认):select * into outfile ‘e:ddd’ fields terminated by ‘ ’ enclosed by ‘’ line terminated by ‘ ’ starting by ‘’ from teacher;

        还可以用dumpfile来代替outfile 将数据进行原样输出,没有任何格式和分隔符,适用行以什么开行以什始 于二进制数据的导出。 么结束

        Default默认值的使用:

        在创建表时,设置好默认值,插入字段时,要使用默认值的字段值可以是 null 或者 default或default(该字段),不能为空;

        Replace :主键或唯一索引冲突则更新,否则插入。

        语法:replace into `table_name` (field_1,field_2) values (value_1,value_2);

        功能与Insert into ‘table_n’ (key,field_1,field_2) values (value_1,value_2,value_3) on duplicate key update field_1=value_2,field_2=value_3;相同。

        一个表中只能有一个主键,所以想要更换主键是必须先删除掉原来的主键(alter table `table_name` drop primary key) 然后再从新进行添加主键,和自动增长。

        表的导入:

        Load data infile ‘file路径’ into table `table_name`; 用来导入用select * into outfile ‘路径’ from `table_name` 条件;导出的数据,两者之间数据的分割符命令一样。

        导入时要注意主键之间的冲突,所以一般在导出时将主键导出为null,然后利用自动增长,自动建立新的主键。

        Delete 语法细节补充:

        Delete from table_name 条件;

        条件中通常用order by xxx limit xx where xxxx;来作为约束条件。

        Delete 还支持多表之间的链接删除:

        Delete from one ,two using one join two on one_id=two_id where one_id=2;

        链接条件 要删除的表 那种链接方式 约束条件

        这种链接删除方法,代替了使用外键关联进行的删除操作,也就脱离的引擎的限制。

        Truncate:清空表。与delete from table_name功能类似,但是delete是将表中的数据逐一删除,保留了所有数据的记录数,插入新数据时主键进行累加。而truncate是先将表删除后再新建表,不会保留记录数,插入数据是主键从心开始计数。

        Update :更新操作细节(支持order by x limit x where 作为条件,支持多表链接更新): 语法:update one join two on one_id=two_id set one_name=’xx’ ,two_name=’yy’ where one_id=3;(其中的语法与上图delete中的相同)。

        表的备份还原:

        方案一:(适用于mysiam引擎的表)

        直接将存储表结构,数据和配置信息的三个文件进行备份,需要时直接将这三个文件进行复制即可。

        方案二:(通用方案)

        将创建表和数据库的所有sql语句进行保留备份,在需要时直接执行一次即可。

        利用mysql提供的工具mysqldump.exe完成,不属于sql语句,可独立执行的文件,存在于mysql的bin目录下,若已经写入环境变量,可以直接在cmd中执行,若没有,则要进入mysql的bin目录下再执行。

        语法:mysqldump -uroot -p database_name > e:xxx/xxx/xxx.sql;

        链接数据库 保存数据的文件

        还原:用source指定存放sql语句的文件,一次性将文件中所有的sql语句执行完毕。

        语法:source e:/xxx/xxx/xxx.sql;

        可以备份数据库中的某几个表:mysqldump -uroot -p db_name table_1 table_2 >e:/xxx/xxx/xx.sql

        视图:

        功能:为真实的表建立一个虚拟的表,来隐藏某些关键的字段,不被客户端看见或者操作。

        创建视图:create view v_name as select field_1,field_2 from table_name ;

        视图本身没有数据和结构,对视图进行操作被隐藏的字段不能被操作。

        删除视图:drop view v_name;(不会影响到真实表中的数据)

        修改视图:alter view v_name as select field_1,field_2,field_3 from table_name;

        对视图中显示的字段进行虚拟:

        Create view v_name (v_field_1,field_2) as select field_1,field_2 from table_name;

        虚拟字段

        视图可以将多个关联表中的字段集中显示在一个视图中,所以,通过建立视图来缩减多表之间的链接查询的业务量,直接调用视图即可进行查询,是视图的又一强大功能。 如果做外部应用,一个数据库对应多个业务,则应针对每个业务建立一个对应的视图。

        事务:

        一组sql语句操作单元,组内所有语句共同完成一个业务。如果整组成功,意味着整个业务成功。如果其中的一条语句失败,意味着整个业务失败,其余的正确操作没有任何意义,应该回到数据库操作前的状态。

        功能:失败后可以回到初始位置。在没有全部执行成功之前,别的用户(进程、会话)看不到未完成业务的中间结果。

        思路:在一组操作之间设置一个记录点,备份点。

        实现:利用innodb或BDB引擎的事务日志功能。

        分析:sql语句的执行分为两个阶段;1、sql语句执行阶段;2、sql语句执行的结果的提交阶段。

        事务功能就是对第一阶段的执行结果进行存储,暂时不进行上传到数据库。

        语法:通过系统变量autocommit进行配置。

        默认autocommit=1自动进行上传数据库。

        Autocommit=0不会自动上传sql语句执行结果。

        在执行事务期间所有的结果造成的影响,只能在当前回话中看到。当判断所有的事物的语句全部执行成功就可以选择提交,若没有,则滚回到初始状态。

        语法:提交:commit 滚回:rollback

        最常用的事务命令:start transaction 该命令不论事务是否成功或者失败,在完成后会自动回到start前的状态。

        事务功能的特点:原子性、隔离性、一致性、封闭性;当一个事务正在操作时,其他客户端无法操作数据库。

        触发器:

        对数据监听进行操作;在当前表的每行记录上设置监听器,监听相关事件的发生,当事件发生时,就执行一段sql代码段。

        创建触发器:create trigger 名字 事件 执行性代码

        事件:插入(insert )、删除(delete)、更新(update)

        事件的发生时机:前(before)、后(after)

        所以共有六种事件:before insert 、before delete、before update、after insert、after delete、after update

        例:create trigger mn after update mmm for each row update nnn set aaa=aaa+100;

        触发器触发时可执行代码 触发事件 名称 机在触发器内获得触发该触发器时的相关数据:

        利用触发程序内的old 和new关键字来记录触发前后的数据状态。 Old:监听所在表上的数据在事件发生之前的状态。

        New:监听所在表上的数据在事件发生之后的状态。

        Old、new相当于一个记录号

        例:create trigger mn after update on mmm for each row update nnn set

        aaa=aaa+(old.gg-new.gg);

        Insert 触发器不能使用 old

        Delete触发器不能使用new

        当可执行代码为多条语句时:

        1、使用begin end为容器进行包裹

        2、每条语句使用‘;’作为结束标志。

        3、由于2的原因,还要对默认的语句结束标志进行修改:

        Delimiter 符号 修改默认的语句结束符,在整个触发器创建语句执行完成后,用此符号结束,并改回原来的语句结束符号。

        例:drop trigger mn;

        delimiter $

        create trigger mn after insert on mmm for each row

        begin update nnn set `add`=`add`+ 200;

        update nnn set del=del-200;

        end$

        delimiter ;

        注意:1、触发器不能同名2、mysql当前只支持一个事件构建一个触发器。 触发器删除:drop trigger trigger_name;

        查看触发器:show create trigger trigger_name;

        PHP与mysql:

        

        PHP与mysql的链接语法:

        Mysql_connect(‘地址+端口’,’用户名’,’密码’) 设置编码:mysql_query(‘set name gbk’);

        

        Mysql_fetch_assoc():返回关联数组,数组的下表为字符串。 Mysql_fetch_row():返回索引数组,数组的下表为数字,表示所在位置。 Mysql_fetch_array():返回混合数组,既有索引数组也有关联数组。 关闭数据库:mysql_close();

        

        常用函数:

        错误处理函数:php在利用其拓展功能执行sql语句时,一旦sql语句发生语法错误,不会有错误提示,称之为静默模式的处理机制。

        提示错误信息函数:

        mysql_error() :错误信息

        Mysql_errno() :错误编码

        例:if (!mysql_query($query)){

        Exit(mysql_erron().’:’.mysql_error)

        }经常将此语句封装到一个方法中在每次执行完sql语句时候都来调用此方法。

        获得结果集内数据的数量:mysql_num_rows(结果集);适用于查找之后结果集的数量查询 操作后受影响的行数:mysql_affected_rows();适用于增、删、改之后受影响的行数查询获得最新的自动增长的字段的值(通常每个表都会有一个自动增长的主键id,但其自动增长的值是数据库自行生成,有事需要知道最新的主键值来进行数据的插入): Mysql_insert_id(): 不论表中自动增长的字段是什么,都会自动识别自动增长的字段,很常用。

        资源使用完毕后释放资源:myslq_free_result(结果集); 释放资源要有选择性的释放。

        SQL编程:

        注释:行注释:-- 或者 #

        块注释:/* */

        语句结束符:命令行(3种):“;”,“g”,“G” “;”和“g”是原样输出。“G”简单的格式化输出。

        变量:

        1、系统变量:可以直接调用,show variables;显示所有系统变量。

        2、用户自定义变量:

        定义方法:set @变量名=值 注意:为了区分系统变量和用户自定义变量,在定义时需要在变量名前加@符号。

        用select @a;可以看出@a的值

        多变量同时赋值:select 10,20,30 into @a,@b,@c; 查看变量:select @a,@b,@c; 也可以将表中的记录注入到变量中:

        Select aaa from t_name into @a where id=3; 注意:要注入的值只能是一个值,否则赋值失败。

        Select @who=’马宁’ 次语句不是赋值语句,而是用来判断变量@who中的值是否与‘马宁相等’。若赋值,应该用‘:=’来赋值,select @who:=’马宁’。

        Set 是专门的赋值语句,既可以set @who=’马宁’也可以set @who:=’马宁’ 复合语句:set @aa=(select count(*) from t_name);

        自定义变量:作用域:全局,但存在局部作用域变量(在函数内定义的变量)。

        有效期:回话结束,即链接断开之后,变量存在,但值归为NULL。

        函数:

        内置函数:rand() 取得0到1之间的随机数。

        例: 取得5到10之间的随机数:5+5*rand(); 取得5到10之间的随机整数:5+floor(5*rand());

        显示当前时间函数:now()

        时间戳函数:unix_timestamp()

        将时间戳转换为时间函数:from_timestamp()

        Substring(元字符串,开始位置,截取长度) 字符串截取长度(字符数不是字节数,而且从1开始)

        Concat() 字符串连接函数

        Lpad(要操作的字符串,最大填充长度,填充物) 左边填充函数加密函数:md5(要加密的字符)项目常用

        Password(要加密的字符)mysql内部独用

        Sha1(要加密的字符)项目常用

        自定义函数:

        结构:函数名,参数列表,函数体,返回值

        语法:定义:create fountion(参数列表)返回值类型

        函数体

        例:delimiter $

        create function holle_world () returns varchar(20) begin

        return 'holle world!';

        end$

        delimiter ;

        调用:select 函数名(); 例:select holle_world(); 注意:函数与当前数据库绑定,只在当前数据库中可以使用,但同样可以使用 数据库.函数名 的方法来调用。

        流程控制: delimiter $

        If语句: create function funct1() returns varchar(20)

        If 条件 then begin

        if hour(now())>18 then --hour(时间)获取当前小时数 满足条件要执行的语句; return '天还亮~'; Else else

        return '天要黑了~'; 不满足条件要执行的语句; end if;

        Endif end$

        delimiter ;

        例: drop function if exists funct2;

        delimiter $

        While语句: create function funct2() returns int

        begin While 条件 do

        set @i=1;

        Endwhile set @sum=0;

        while (@i<=10) do

        set @sum=@sum+@i;

        set @i=@i+1;

        end while;

        return @sum;

        end

        $

        delimiter ;

        提前终止:

        Leave 相当于 break 用于退出循环;

        Iterate 相当于 continue 用于退出当前循环;

        注意:sql语句中,leave和iterate 不是有其出现的位置来决定何时推出的,而是使用了标签

        语法(为循环体起名字)。

        标签:while 条件 do 例: drop function if exists funct3;

        delimiter $ 循环体; create function funct3() returns int

        begin End while 标签;

        set @i=0; set @sum=0;

        w:while @i<10 do

        set @i=@i+1; if @i=5 then

        iterate w;

        end if; set @sum=@sum+@i;

        end while w;

        return @sum;

        end $

        delimiter ;

        参数:参数的定义:1、要指明数据类型2、不用@符号定义3、是局部变量,函数外不起作用

        4、一个函数可以有多个参数。

        例: 例1:drop function if exists funct4;

        delimiter $

        create function funct4(_name varchar(10)) returns varchar

        begin

        return concat('你好' ,_name);

        end

        $

        delimiter ;

        还可以这样使用:

        : 例2

        

        局部变量的声明:

        要求:1、需要指明数据类型2、可以指明默认值3、不用@符号 语法:declare i int default 0;

        局部变量只在其所定义的函数内起作用。

        例;

        drop function if exists funct3; delimiter $

        create function funct3() returns int

        begin

        Declare i int default 1;

        Declare sum1 int default 0;

        w:while i<10 do

        set i=i+1;

        if i=5 then

        iterate w;

        end if;

        set sum1=sum1+i;

        end while w;

        return sum1;

        end

        $

        delimiter ;

        s:

        显示当前所处的状态(所处的数据库,id,编码等)。

         


提高MySQL性能的方法 优化MySQL数据库性能的八大妙手
MySQL动态参数MySQL分区介绍
MySQL分区表测试MySQL数据库迁移常用方法
MySQL集群方案MySQL配置优化
MySQL的计划任务MySQL优化策略
Infobright基于MySQL的数据仓库MySQL常用命令
MySQL数据库同步MySQL常用语句
常用基本MySQL语句MySQL创建用户
信息发布:广州名易软件有限公司 http://www.myidp.net
  • 名易软件销售服务
  • 名易软件销售服务
  • 名易软件技术服务

  • MySQL学习分享