MySQL 添加列,修改列,删除列
ALTER TABLE:添加,修改,删除表的列,约束等表的定义。
- 查看列:desc 表名;
- 修改表名:alter table t_book rename to bbb;
- 添加列:alter table 表名 add column 列名 varchar(30);
- 删除列:alter table 表名 drop column 列名;
- 修改列名MySQL: alter table bbb change nnnnn hh int;
- 修改列名SQLServer:exec sp_rename't_student.name','nn','column';
- 修改列名Oracle:lter table bbb rename column nnnnn to hh int;
- 修改列属性:alter table t_book modify name varchar(22);
- 清空表数据:truncate 表名
MySQL 查看约束,添加约束,删除约束 添加列,修改列,删除列
- 查看表的字段信息:desc 表名;
- 查看表的所有信息:show create table 表名;
- 添加主键约束:alter table 表名 add constraint 主键 (形如:PK_表名) primary key 表名(主键字段);
- 删除主键约束:alter table 表名 drop primary key;
- 添加外键约束:alter table 从表 add constraint 外键(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
- 删除外键约束:alter table 表名 drop foreign key 完整约束名; alter table wb_comment drop 外键名; (完整约束名可以通过show create table 表名; 得到)
数据库导入导出
1.导出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql
2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql
3.导出一个数据库结构
mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc >d:wcnc_db.sql
-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table
4.按条件导出数据库表
mysqldump -uroot -p gz_palm sys_recognition_log_image --where="create_time>'2024-05-01'" > /root/sys_recognition_log_iamge_240530.sql
4.导入数据库
常用source 命令
进入mysql数据库控制台,
如mysql -u root -p
mysql>use 数据库
然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source d:wcnc_db.sql
5. mysql导入建表sql语句时中文注释的乱码问题的解决办法如下:
在sql文件开头加上 SET NAMES 'utf8';
-------------------------------------------------------------------------------------------------
MySQL数据库备份和还原的常用命令:
备份MySQL数据库的命令
mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql
备份MySQL数据库为带删除表的格式
备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。mysqldump -–add-drop-table -uusername -ppassword databasename > backupfile.sql
直接将MySQL数据库压缩备份
mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz
备份MySQL数据库某个(些)表
mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql
同时备份多个MySQL数据库
mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql
仅仅备份数据库结构
mysqldump –no-data –databases databasename1 databasename2 databasename3 > structurebackupfile.sql
备份服务器上所有数据库
mysqldump –all-databases > allbackupfile.sql
还原MySQL数据库的命令
mysql -hhostname -uusername -ppassword databasename < backupfile.sql
还原压缩的MySQL数据库
gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename
将数据库转移到新服务器
mysqldump -uusername -ppassword databasename | mysql –host=*.*.*.* -C databasename
--------------------------------------------------------------------------------------------------
上面为导入导出*.sql文件的操作。
MySQL数据库还可以通过拷贝来备份数据库文件,下面介绍一下注意事项。
Mysql安装后在data文件夹中有4种文件.frm .MYD .MYI .opt
*.frm 是描述了表的结构;
*.MYD 保存了表的数据记录;
*.MYI 则是表的索引;
*.opt 记录数据库的选项,数据库的字符集设置 ( character_set_database和collation_database );只要在mysql的安装文件中找到data文件夹,然后在里面建立一个文件夹,比如test。这个test其实就对应着数据库的名称,所以,你想要起什么样的数据库名称就把文件夹起什么名字。
然后把.frm文件导进去。注意还要在data目录下加入ib_logfile0,ib_logfile1,ibdata1这几个文件。
要不然在mysql里只能找到表名(其实一个.frm文件就是对应的数据库中的一个表。)
而不能对其进行操作。如果查询的时候出现某某表不存在的问题,在确认.frm ,db.opt 文件完整的情况下,那么这种表使用的应该是innodb表引擎,应该将数据目录中的innodb数据文件(认ibdata1)
说明:
比如你原来的mysql中有一些数据库了。可以先把原来的data改名字备份在同一目录下。(可能要改名字系统会提示有另一程序在使用这个文件,这个时候可以到控制面板的服务里面,把mysql的服务先关掉,等改完名字,把东西都导进去后再开服务)
然后另建一个data,把在里面建好数据库名把.frm导进去。--------------------------------------------------------------------------------------------------
停止服务可以通过管理工具里面的服务来停,或者用cmd 打开dos界面输入net stop mysql,启动用net start mysql;
只要用旧的ibdata1覆盖原来的,再把相关的数据库copy过去,然后重新启动数据库, 就ok了,进入以后要是对表不能操作可能是数据表已经损坏了。(如果不行报1146错 ,建议重启一下机器在看看)
ib_logfile0,ib_logfile1好象也可以不用覆盖,不然有时候mysql数据库启动不了了,报1067错误。
MYSQL创建utf-8格式的数据库
GBK: create database test2 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
UTF8: CREATE DATABASE test2 DEFAULT CHRACTER SET utf8 COLLATE utf8_general_ci;
UTF8mb4: create database clc_shenzhen default CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
给某个用户赋予某个数据库的所有权限
grant all privileges on facegen.* to 'test'@'%';
处理科学计数法
SELECT CONCAT(gid, "\t"),CONCAT(aid, "\t"),SUM(cnt) as clk_count FROM `ec_aid_oid_hour` WHERE dt BETWEEN "2019-12-16 01:00:00" AND "2019-12-17 01:41:00" GROUP BY gid,aid HAVING clk_count>5000
MYSQL整型取值范围:
int32就是INT,int64就是BIGINT
MYSQL创建存储过程:
ymoffers_report > delimiter $$
ymoffers_report > create procedure del_erp_data()
-> BEGIN
-> DELETE FROM erp_income_cost_record WHERE record_date < DATE_SUB(CURDATE(),INTERVAL 3 DAY);
-> END$$
Query OK, 0 rows affected (0.01 sec)
Json类型查询和更新数据:
- SELECT *,json_extract(extra,'$.answers.answer') FROM `statistic_question_history` where ask_time>="2022-04-22 00:00:00" AND extra LIKE '%station_id"
- UPDATE ads SET payload = json_set(payload,"$.status", 2) WHERE oid=698321
求MYSQL中某字段内的重复数据:
- select d_name,count(d_name) from tbl_vod group by d_name having count(d_name)>1
MYSQL查询某个库各表的数据记录数
SELECT table_name, TABLE_ROWS AS 'Rows' FROM information_schema.TABLES WHERE table_schema = 'dongguan_palm_alg';
MYSQL按月分组查询
SELECT DATE_FORMAT(ask_time,'%Y%m'),question_type,count(*) FROM `statistic_question_history` WHERE ask_time>='2022-07-01' and ask_time<'2023-01-01' GROUP BY DATE_FORMAT(ask_time,'%Y%m'),question_type
Float,Double,Decimal的区别:
都工作两年了,还不知道浮点数如何转二进制? - 知乎
mysql : float,double,decimal - 简书
PostgreSQL命令:
- 数据库登陆:psql -U postgres -d conversion_data -p 5432 -h 172.16.1.55
- 查看表结构:\d orders
四种隔离级别:
mysql 四种隔离级别
幻读是啥,会有什么问题?如何解决?
UBUNTU安装mysql
centos卸载和安装mysql
麒麟系统安装mysql
银河麒麟V10安装mysql5.7详细过程-优快云博客
关闭银河麒麟系统的“麒麟安全授权认证”窗口_麒麟安全授权认证 总弹出来-优快云博客
mysql binlog恢复数据
GBase操作
- 查看所有数据库用户表:select tabname from systables where statlevel='A'
- -242错误处理:onstat -g sql 把连接到这个数据库库的sql都onmode -z杀掉
- 数据库重启 onmode -ky && oninit -vy
- 导出数据库中所有的表结构到文件db.sql:dbschema -d your_database -t all db.sql
- 导出数据库中一个表的结构到文件db.sql:dbschema -d your_database_name -t your_table_name db.sql
mysql不走索引情况:
mysql哪些查询情况不走索引-mysql教程-PHP中文网
复杂sql记录:
SELECT
ss.bus_time,
ssss.name,CASE ssd.bus_type WHEN 0 THEN '首班车' ELSE '末班车' END as '首末班车',
CASE ssd.direction WHEN 0 THEN '正方向' ELSE '反方向' END as '正反方向',
sss.name as '终点站',
ssd.is_delete
FROM
`subway_schedule` ss LEFT JOIN subway_line_station sls ON sls.id=ss.line_station_id
LEFT JOIN subway_schedule_direction ssd ON ssd.id=ss.direction_id
LEFT JOIN subway_line_station slss ON slss.id=ssd.terminal_id
LEFT JOIN subway_station sss ON sss.sid=slss.station_id
LEFT JOIN subway_station ssss ON ssss.sid=sls.station_id
WHERE
sls.line_id=19;
mysql筛选不含中文的记录:
select * from statistic_question_history where id not in (select id FROM statistic_question_history WHERE create_time>'2023-01-01' and create_time<'2024-01-01' and locate('?',CONVERT(before_question USING ASCII))) and create_time>'2023-01-01' and create_time<'2024-01-01'