MySQL操作
Ubuntu 下载mysql
sudo apt install mysql-server mysql-common
已root用户通过mycli 补全tab进入MySQL命令行进行操作。
$ sudo pip3 install mycli
% sudo mycli -uroot mysql> create user '用户名'@'访问主机' identified by '密码';
mysql> grant 权限列表 on 数据库 to '用户名'@'访问主机' ;(修改权限时在后面加with grant option)
字段操作
添加字段
ALTER TABLE table_name ADD COLUMN Name VARCHAR(128) DEFAULT NULL COMMENT '姓名';
ALTER TABLE table_name CHANGE old_name new_name field_type;
ALTER TABLE table_name DROP field_name;
INSERT 中的子查询
考虑与 CUSTOMERS 表拥有相似结构的 CUSTOMERS_BKP 表。现在要将 CUSTOMER 表中所有的数据复制到 CUSTOMERS_BKP 表中,用于复制表数据,克隆数据库。
SQL> INSERT INTO CUSTOMERS_BKP SELECT * FROM CUSTOMERS WHERE ID IN (SELECT ID FROM CUSTOMERS) ;
UPDATE中的子查询
mysql出现You can’t specify target table for update in FROM clause 这个错误的意思是不能在同一个sql语句中,先select同一个表的某些值,然后再update这个表。 select的结果再通过一个中间表select多一次,就可以避免这个错误。
注意,只有mysql会有这个问题,mssql与oracle都没有这个问题。
update worknote set endtime = 1595211930 where id in (select id from (select id from worknote ) as a);
导出表结构和表数据
mysqldump 导出表结构和表数据
mysqldump -h localhost -uroot -p123456 (-d) dbname (table) ( --ignore-table=dbname.tablename) > dump.sql
-d: 导出时不包含数据
table: 导出时指定单个表
--ignore-table=dbname.tablename: 导出时排除某个表
所以上面不包括括号内容时代表着,导出整个daname数据库所有的表结构和表数据。
时间戳转换
mysql> SELECT FROM_UNIXTIME(1560739226, '%Y-%m-%d %H:%m:%s') as time; +---------------------+ | time | +---------------------+ | 2019-06-17 10:06:26 | +---------------------+ 1 row in set (0.00 sec) mysql> SELECT DATE_FORMAT(1560739226, '%Y-%m-%d %H:%m:%s') as time; +------+ | time | +------+ | NULL | +------+ 1 row in set, 1 warning (0.00 sec)
时间格式('%Y-%m-%d %H:%m:%s')字符串%s直接存进数据库中,需要UNIX_TIMESTAMP('%s')进行转换成时间戳,这样可以组SQL语句进行比较时间大小范围。
MySQL的limit m,n
SELECT * FROM table_name LIMIT [m],n;
SELECT * FROM stu LIMIT 2,4; //取stu表中第3至第6条,共4条记录。
m: [m]为可选,如果填写表示skip步长,即跳过m条。
n:显示条数。指从第m+1条记录开始,取n条记录。
SQLDriveConnect报错
连接到驱动程序
参考
-------------------------------------------
Wish you all the best and good health in 2021.