程序小屋

记录生活中的点滴,分享、学习、创新

文章内容 1623753400

二级Mysql语句

数据库连接

mysql -u['username'] -p['password']

数据库退出

exit

数据库操作

创建:create database test(数据库名)  DEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;

修改:alter database test

      deafault character set gb2312 (修改默认字符集为gb2312)

      deafalut collate gb2312_chinese_ci; (修改默认校对规则为gb2312_chinese_ci)

删除:drop database test;

查看:show databases [like 'test'];

          select database();查看当前使用的数据库

使用数据库:use test  (不用分号)

 

表操作

创建:create table students

          (id char(10) not null primary key,

           name char(6) not null ,

           sex char(2) not null default 0,

            major char(20 not null));---列名 数据类型 约束

更新:alter table test.student

      add column city char(20) default null       (添加列)

      change column  city home char(20) not null  (可同时修改表中指定列的名称和数据类型)

      modify column id int first/after             (修改指定列的数据类型,first/after修改指定列在表中的位置)

      alter column city set default '广州';        (可修改或删除表中指定列的默认值)

      drop column city;                           (删除列)

      rename to test.university_student;           (为表student重命名为university_student)

重命名:rename table test.university_student to student;

复制:create table test.student_copy like test.student;    (复制表结构)

        create table test.student_copy as test.student;      (复制表结构和内容,但是索引和完整性约束不会被复制)

删除:drop table test.student;

查看:show tables;                  (查看当前数据库的所有表名称)

      show columns from student; | desc 表名;    (查看表结构)

插入数据:insert into test.student(id,name,sex,major) values('001','lwk','0','计算科学');

删除数据:delete from test.student where id='001';    (不指定where将删除所有数据)

修改数据:updata test.student set id='002' where name='lwk';

 

数据库的查询

查询表达式结果:select 2+3;  (可得到2+3的计算结果5 注:select 'c'+'d';输出0)

查询表数据:select id,name from student;

替换查询结果数据: select sex,

                   case

                       when sex='0'then '男'

                       else '女'

                   end [as '性别']             (as '性别'是给列sex取列别名)

                   from test.student;          (注意这里还是一个select…from…子句)

高级查询和sqlserver一样(嵌套查询和join连接)

嵌套查询:select 城市 from lwk.仓库  where 仓库号 in (select 仓库号 from lwk.职工 where 工资>5000)

join连接:select 供应商名 from lwk.供应商 join lwk.订购单 on 供应商.供应商号=订购单.供应商号 join lwk.职工 on 职工.职工号=订购单.职工号 join lwk.仓库 on 仓库.仓库号=职工.仓库号 where 地址='韶关' and 城市='广州'

 

字符串、文本匹配

通配符匹配:select name from student where major like('计%')                                  (%代表多个字符 _代表一个字符)

正则表达式匹配:select name from student where major [not] regexp|rlike '计';            (基本字符匹配,与百分号通配符效果类似)

                select name from student where id [not] regexp|rlike '计算科学|信息计算';     (选择匹配)

                select name from student where major [not] regexp|rlike '[1-9]';                   (范围匹配)

 

group by …having…子句

select major ,cout(*) 总人数 from student group by student.major having cout(*)>2;

 

order by 子句 (asc升序|desc降序)

asc和desc不能影响到逗号外的列,默认是asc

select * from app_public_feedback order by created_on desc limit 0,10;

 

limit 子句

select id,name from student limit 2,4;                    (从第3行开始取4行数据)

select id,name from student limit 4 offset 2;             (从第3行开始取4行数据)

 

视图

创建:create view test.id_view as select id from student where sex='0';

修改:alter view test.name_view as select name from student where sex='0';

查看:show create view name_view;

更新:update/delete/insert(和表的使用方法类似,把表名改成视图名就好)

      如果视图包含 聚合函数 distinct关键字 group by子句 having子句 union运算符        位于选择列表中的子查询    from子句中的不可更新视图或包含多个表 where子句中的子查询,引用from子句中的表 时视图不可更新

删除:drop view name_view;

 

触发器

创建:create trigger test.student_trigger <before|after> <insert| updata| delete> on test.student for each row <主体>  (主体如果要执行多个语句,要使用begin…end复合结构)

      例如:create trigger test.student_insert after insert on test.student for each row set @str='add a new student';

删除:drop trigger [if exists] test.student_insert;

当触发器涉及对表自身的更新操作时,只能使用before触发器。

old表中的值全部是只读的。(new操作后的表,old操作前的表)

load data语句能激活before insert触发器。

每个表最多有六个触发器,每种各一个。每个表每个事件每次只允许一个触发器。

触发器不能建立在视图上。

 

事件   

InnoDB : 事物型数据库首选引擎

需要确保MySQL中的event_scheduler已开启

(查看当前事件调度器是否开启 show variables like 'event_scheduler';|select @@event_scheduler;

    开启|关闭事件调度器            set global event_scheduler=true|false;)

创建:create event event_name

      on scheduler every 1 month|year|quarter|day|hour|minute|……

      do

      insert into student values('002','路人甲',default,'君子修养');

修改:allter event event_name [rename to event_newname][do <事件主体> ][disable|enable(关闭|开启事件)];

删除:drop event event_name;

事件是基于特定时间周期来触发的

如果不显式地指明,事件在创建后处于关闭状态 

 

存储过程

创建:create procedure name ([过程参数])<过程体>

     过程体一般写在begin……end之间

     过程参数格式: [in|out|inout] <全局参数名><类型>

       IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值

       OUT 输出参数:该值可在存储过程内部被改变,并可返回

       INOUT 输入输出参数:调用时指定,并且可被改变和返回

需要具有create routine权限。

过程体:delimiter

(修改命令结束符为

(修改命令结束符为

)

     &n

*