MySQL

Nov 18, 2015


MySQL的相关操作(基于python-mysql)


连接到mysql(和python-mysql无关)

  • 安装好Mysql后。把安装目录下的Mysql.exe的文件路径加入系统环境变量中,启动终端后即可执行mysql命令

  • 链接数据库的命令格式为:mysql -u 用户名 -p 密码 ;第一次运行mysqld -u root 即以root用户登录,root用户是默认的起始用户,可以用来链接数据库服务器。连接以后就可以执行sql语句生成用户密码等,下次就可以用新的用户名和密码登录。

  • 注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码。

      启动关闭服务:
      net start/stop mysql
        
      登录:
      mysql -hlocalhost -uroot -p        其中-h表示服务器名,localhost表示本地;-u为数据库用户名,root是mysql默认用户名;-p为密码,如果设置了密码,可直接在-p后链接输入,如:-p123456,用户没有设置密码,显示Enter password时,直接回车即可。
        
      注意:如果mysql没有安装在C盘下,则需要先使用DOS命令进入mysql的安装目录下的bin目录中,才能执行上述命令
    
      显示系统信息:
      show variables like 'version';#一条命令以分号结束!!!
      show variables like '%auto_incre%'; #显示字段自增的设置
      输出:
      Variable_name            | Value |
      +--------------------------+-------+
      | auto_increment_increment | 1     |
      | auto_increment_offset    | 1
    

增删改查数据(基于python-mysql)

  • 插入数据:

      db.insert("cv_video_episodes", ve_video_id=video_id, ve_video_name=video_name, ve_episode_id=episode_id)        
    
  • 查看

      查询值为空的记录,要用 :字段 is null
      SELECT * FROM `yjk_eb_deal` WHERE d_ds_id=6 AND d_deal_url is null;
        
      查询最新的一条记录:
      SELECT * FROM 表名 ORDER BY id DESC LIMIT 0,1 ;
    
  • 删除

  • 更新,也即修改数据

    db.execute("update cv_video_detail_msg_copy set cv_played_count=%s, cv_video_rate=%s, cv_comment_num=%s, cv_support_num=%s, \
                     cv_update_schedule=%s, cv_update_status=%s", played_count, video_rating, comment_num, support_num, update_schedule, update_status)
    

其他

  • 动态增加字段

      格式:alter table 表名 add 字段名 字段类型和长度等设置
    
      try:
          for i in range(1):
              sql = "alter table db_test add key%s text" %i
              curs.execute(sql)
      except Exception,e:
          print e
    
  • 设置字段自增

      只能主键设置自增!
      基本命令格式如下:
      ALTER TABLE 表名 MODIFY 列名 column_definition
        
      其中column_definition字段需要包括以下内容:
      1、该列的数据类型及AUTO_INCREMENT字段;
      2、如该列必须为NOT NULL及PRIMARY KEY(UNIQUE)属性。如果不是,需添加相应定义。
        
      例:
      ALTER TABLE `cv_video_detail_msg_copy` MODIFY cv_id INT auto_increment;
        
      #无符号整型
      ALTER TABLE `cv_video_detail_msg_copy` MODIFY cv_id INT UNSIGNED auto_increment; 
        
      注:只有int类型且为primary key 才可以使用auto_increment.
        
      #删除表中的内容,让表字段重新从1开始自增
      truncate 表名
        
      给主键添加自增属性
      alter table 表名 MODIFY 键名 INT UNSIGNED AUTO_INCREMENT;
    
  • 设置字段自增的2个系统变量:auto_increment_offset和auto_increment_increment

      auto_increment_increment  控制列中的值的增量值,也就是步长。取值范围是1 .. 65535.
      auto_increment_offset  确定AUTO_INCREMENT列值的起点,也就是初始值。取值范围是1 .. 65535.
        
      设置方法为:
      SET @@auto_increment_offset=1;
      SET @@auto_increment_increment=1;
    
  • 加索引:

      alter table 表名 add index 索引名 (字段名1[,字段名2 …]);
      例:
      alter table employee add index emp_name (name);
    
  • 删除索引:

      alter table 表名 drop index 索引名;
      例:
      alter table employee drop index emp_name;
    

其他常用的命令

  • 退出MYSQL命令: exit (回车)

  • 修改密码:直接在终端中,不需要登录mysql

      格式:mysqladmin -u用户名 -p旧密码 password 新密码
        
      例:给root加个密码。因为开始时root没有密码,所以-p旧密码一项就可以省略了。
      mysqladmin -u root -password 密码
    
  • 增加新用户:

      grant select on 数据库.* to 用户名@登录主机 identified by “密码”        
      例:增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用root用户连入MYSQL,然后键入以下命令:
      grant select,insert,update,delete on *.* to [email=test1@”%]test1@”%[/email]” Identified by “abc”;
      注意:增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了。
      例:增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。
        
      grant select,insert,update,delete on mydb.* to [email=test2@localhost]test2@localhost[/email] identified by “abc”;
         
      如果你不想test2有密码,可以再打一个命令将密码消掉。
      grant select,insert,update,delete on mydb.* to [email=test2@localhost]test2@localhost[/email] identified by “”;
    
  • 创建数据库:创建数据库之前要先连接Mysql服务器

      命令:create database <数据库名>
        
      例:创建数据库并分配用户
      CREATE DATABASE 数据库名;
      GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON 数据库名.* TO 数据库名@localhost IDENTIFIED BY '密码';
      SET PASSWORD FOR '数据库名'@'localhost' = OLD_PASSWORD('密码');
      依次执行3个命令完成数据库创建。
    
  • 通过运行sql文件创建数据库

      方法一 使用cmd命令执行(windows下,unix或linux在的其控制台下)
      【Mysql的bin目录】\mysql –u用户名 –p密码 –D数据库<【sql脚本文件路径全名】,示例:
      D:\mysql\bin\mysql –uroot –p123456 -Dtest<d:\test\ss.sql
      注意:
      A、如果在sql脚本文件中使用了use 数据库,则-D数据库选项可以忽略
      B、如果【Mysql的bin目录】中包含空格,则需要使用“”包含,如:“C:\Program Files\mysql\bin\mysql” –u用户名 –p密码 –D数据库<【sql脚本文件路径全名】
    
      方法二 进入mysql的控制台后,使用source命令执行
      Mysql>source 【sql脚本文件的路径全名】 或 Mysql>\. 【sql脚本文件的路径全名】,示例:
      source d:\test\ss.sql 或者 \. d:\test\ss.sql
    

Mysql中插入emoji表情

  • 插入Emoji表情,保存到数据库时报错:

      SQLException: Incorrect string value: '\xF0\x9F\x98\x84' for column 'review' at row 1
      原因:
      UTF-8编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。
        
      解决办法:
      方法1:相应的数据库栏位字符集改为:utf8mb4即可
      方法2:对获得的数据过滤掉emoji表情字符
      str = str.replaceAll("[^\\u0000-\\uFFFF]", "");
    

参考文章:Mysql命令大全


结语:

坚持每天进步一点点…