mysql

事务特性
 原子性:组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分
 一致性:在事务处理执行之前和之后,数据是一致的。
 隔离性:一个事务处理对另一个事务处理没有影响。
 持续性:当事务处理成功执行到结束的时候,其效果在数据库中被永久纪录下来。

创建表
    SET FOREIGN_KEY_CHECKS=0;

    DROP TABLE IF EXISTS user;
    CREATE TABLE user (
        id int(50) NOT NULL auto_increment,
        username varchar(50) default NULL,
        password varchar(50) default NULL,
        PRIMARY KEY  (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    DROP TABLE IF EXISTS user_info;
    CREATE TABLE user_info (
        id int(11) NOT NULL auto_increment,
        user_id int(11) default NULL,
        address varchar(500) default NULL,
        c_date date default NULL,
        PRIMARY KEY  (id),
        KEY fk_user_ui (user_id),
        KEY ui_c_date_index (c_date),
        CONSTRAINT fk_user_ui FOREIGN KEY (user_id) REFERENCES user (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

常用
    delimiter /   修改定界符
 CREATE DATABASE menagerie;     创建数据库
 show databases;  显示所有的库
 user test; 选择库
 show tables; 显示所有的表
 DESCRIBE tablename;   显示表的定义信息
 select version(); 显示版本信息
 select CURRENT_DATE; 显示当前日期
 select curdate();
 select now(); 显示当前日期时间
 select user(); 显示当前登录用户
 SELECT DISTINCT owner FROM pet; 去除重复项
 SELECT DATABASE(); 当前选中的库
 select @a:= username from user where id = 1; 把username值赋给变量@a

自定义函数
    DROP FUNCTION IF EXISTS hello;
    CREATE FUNCTION hello(s varchar(20)) RETURNS varchar(1000)
    BEGIN
         declare t varchar(1000) default '';
         declare id1 int;
         declare username1 varchar(50);
         declare no_more_departments int;

         declare cur1 cursor
         for
            select id,username from test;

         DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_departments=1;
         open cur1;

          REPEAT
               FETCH cur1 INTO id1, username1;
               if (no_more_departments is null) then
                set t = concat(t,';',id1,'-',username1);
               end if;
          until no_more_departments END REPEAT;

         close cur1;
         RETURN t;
    END;
    调用
    select hello('') t from dual

存储过程
    delimiter //
    CREATE PROCEDURE p1 (OUT param1 INT)
    BEGIN
      SELECT COUNT(*) INTO param1 FROM t;
    END

    调用
    call p1(@a);
    select @a

视图
    CREATE VIEW v AS SELECT * FROM user;
    调用
    select * from v

触发器

 CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
 CREATE TRIGGER ins_sum BEFORE INSERT ON account
 FOR EACH ROW SET @sum = @sum + NEW.amount;

 使用别名OLD和NEW,能够引用与触发程序相关的表中的列。OLD.col_name在更新或删除它之前,引用已有行中的1列。NEW.col_name在更新它之后引用将要插入的新行的1列或已有行的1列。

root不能远程登录
    UPDATE mysql.user SET Host='%' WHERE Host='localhost';
    GRANT ALL PRIVILEGES ON *.* TO root@"%" ;
    FLUSH PRIVILEGES;

字符串类函数

    CHARSET(str) //返回字符串字符集
    CONCAT (string2  [,... ]) //连接字串
    INSTR (string ,substring ) //返回substring首次在string中出现的位置,不存在返回0
    LCASE (string2 ) //转换成小写
    LEFT (string2 ,length ) //从string2中的左边起取length个字符
    LENGTH (string ) //string长度
    LOAD_FILE (file_name ) //从文件读取内容
    LOCATE (substring , string  [,start_position ] ) 同INSTR,但可指定开始位置
    LPAD (string2 ,length ,pad ) //重复用pad加在string开头,直到字串长度为length
    LTRIM (string2 ) //去除前端空格
    REPEAT (string2 ,count ) //重复count次
    REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替换search_str
    RPAD (string2 ,length ,pad) //在str后用pad补充,直到长度为length
    RTRIM (string2 ) //去除后端空格
    STRCMP (string1 ,string2 ) //逐字符比较两字串大小,
    SUBSTRING (str , position  [,length ]) //从str的position开始,取length个字符,
    TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) //去除指定位置的指定字符
    UCASE (string2 ) //转换成大写
    RIGHT(string2,length) //取string2最后length个字符
    SPACE(count) //生成count个空格

数学类函数

    ABS (number2 ) //绝对值
    BIN (decimal_number ) //十进制转二进制
    CEILING (number2 ) //向上取整
    CONV(number2,from_base,to_base) //进制转换
    FLOOR (number2 ) //向下取整
    FORMAT (number,decimal_places ) //保留小数位数
    HEX (DecimalNumber ) //转十六进制
    LEAST (number , number2  [,..]) //求最小值
    MOD (numerator ,denominator ) //求余
    POWER (number ,power ) //求指数
    RAND([seed]) //随机数
    ROUND (number  [,decimals ]) //四舍五入,decimals为小数位数]
    SIGN (number2 ) //返回符号,正负或0
    SQRT(number2) //开平方

日期时间类函数

    ADDTIME (date2 ,time_interval ) //将time_interval加到date2
    CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //转换时区
    CURRENT_DATE (  ) //当前日期
    CURRENT_TIME (  ) //当前时间
    CURRENT_TIMESTAMP (  ) //当前时间戳
    DATE (datetime ) //返回datetime的日期部分
    DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或时间
    DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式显示datetime
    DATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上减去一个时间
    DATEDIFF (date1 ,date2 ) //两个日期差
    DAY (date ) //返回日期的天
    DAYNAME (date ) //英文星期
    DAYOFWEEK (date ) //星期(1-7) ,1为星期天
    DAYOFYEAR (date ) //一年中的第几天
    EXTRACT (interval_name  FROM date ) //从date中提取日期的指定部分
    MAKEDATE (year ,day ) //给出年及年中的第几天,生成日期串
    MAKETIME (hour ,minute ,second ) //生成时间串
    MONTHNAME (date ) //英文月份名
    NOW (  ) //当前时间
    SEC_TO_TIME (seconds ) //秒数转成时间
    STR_TO_DATE (string ,format ) //字串转成时间,以format格式显示
    TIMEDIFF (datetime1 ,datetime2 ) //两个时间差
    TIME_TO_SEC (time ) //时间转秒数]
    WEEK (date_time [,start_of_week ]) //第几周
    YEAR (datetime ) //年份
    DAYOFMONTH(datetime) //月的第几天
    HOUR(datetime) //小时
    LAST_DAY(date) //date的月的最后日期
    MICROSECOND(datetime) //微秒
    MONTH(datetime) //月
    MINUTE(datetime) //分

优化
    in ->  exists
        select * from A where cc in (select cc from B)
        select * from A where exists(select cc from B where cc=A.cc)

备份
    备份一个库
        d:\mysql\bin>mysqldump -u root -p db_name > f:\1.sql

    备份一个库下的多个表
        d:\mysql\bin>mysqldump -u root -p db_name table1 table2 > f:\1.sql

    备份多个库
        d:\mysql\bin>mysqldump -u root -p -B db_name1 db_name2 > f:\1.sql

    备份所个库
        d:\mysql\bin>mysqldump -u root -p -A > f:\1.sql

还原
    d:\mysql\bin>mysql -u root -p db_name < f:\1.sql

    mysql> use dbname;
    mysql>source f:\1.sql;

两表插入
 insert into ttt (num) select t2.num from ttt t2 where t2.id = 2


sql
 --以逗号分隔查询出来的数据,第一种
 select Group_concat(name SEPARATOR ',') from district where pid=1;
 --以逗号分隔查询出来的数据,第二种
 select group_concat(name order by id asc separator ',') as name from district where pid=1;

 

 

 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值