mysql-3 数据表的创建、增删改查
1.创建数据表
通用语法:CREATE TABLE table_name (column_name column_type);
CREATE TABLE IF NOT EXISTS `csj_tbl`(
`csj_id` INT UNSIGNED AUTO_INCREMENT,
`csj_title` VARCHAR(100) NOT NULL,
`csj_author` VARCHAR(40) NOT NULL,
`submission_date` DATE,
PRIMARY KEY ( `csj_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
- AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
- PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。
- ENGINE 设置存储引擎,CHARSET 设置编码。不设置utf-8,输入中文会出现展示问题。
- 表名和字段名外面的符号是反单引 ` ,不是单引号。
2.删除数据表
删除数据表有3种情况。
类型 | 内容 | 空间 |
---|---|---|
drop | 删除表结构和全部数据 | 立刻释放磁盘空间,包括Innodb和MylSAM |
truncate | 保留表结构,删除全部数据 | 立刻释放磁盘空间,包括Innodb和MylSAM |
delete | 保留表结构,删除指定的数据 | MyISAM会立刻释放磁盘空间,InnoDB不会释放空间。执行delete后,使用optimize table table_name会释放全部磁盘空间 |
drop table table_name;
drop table csj_tbl; #删除表
truncate table csj_tbl; #删除全部数据
delete from student; #删除全部数据
delete from student where name="tom"; #删除张三的数据
3.插入数据
语法:INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
#指定行添加
insert into csj_tbl (csj_title,csj_author,submission_date)
values("学习 java","菜鸟教程",NOW());
#不指定行添加
insert into csj_tbl
values(2,"学习 python","菜鸟教程",'2016-03-06');
#添加多行数据
insert into csj_tbl (csj_title,csj_author,submission_date) values
("学习 php","廖雪峰",NOW()),
("学习 c++","菜鸟教程",NOW());
select * from csj_tbl;
select * from csj_tbl;
不指明列,会将数据依次插入到每列。此时要将每个数值全部写入,即使自增的数据,也不能省略。
4.mysql查询数据
语法:
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
- 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
- SELECT 命令可以读取一条或者多条记录。
- 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
- 你可以使用 WHERE 语句来包含任何条件。
- 你可以使用 LIMIT 属性来设定返回的记录数。
- 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0
select * from csj_tbl where csj_author="菜鸟教程" LIMIT 2;
5.where字句,设定查询条件
where 条件1 and|or 条件2
- 查询语句中你可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。
- 你可以在 WHERE 子句中指定任何条件。
- 你可以使用 AND 或者 OR 指定一个或多个条件。
- WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。
- WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。
条件中可以使用操作符
select * from csj_tbl where (csj_author="菜鸟教程" ) and (csj_id = 2 );
6.修改数据update
语法:
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
- 你可以同时更新一个或多个字段。
- 你可以在 WHERE 子句中指定任何条件。
- 你可以在一个单独表中同时更新数据。
update csj_tbl set csj_author="菜鸟教程2" where csj_id=2;
#修改日期类型数据
UPDATE ACCOUNT_USER set CREATE_TIME=TO_DATE('2018-11-28 09:38:26','yyyy-mm-dd hh24:mi:ss') where id = 'C803' ;
commit;
7.delete
语法:DELETE FROM table_name [WHERE Clause]
- 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
- 你可以在 WHERE 子句中指定任何条件
- 您可以在单个表中一次性删除记录。
delete from csj_tbl WHERE csj_id=1;
8.like字句
WHERE 子句中可以使用等号 = 来设定获取数据的条件,如 "runoob_author = 'RUNOOB.COM'"。
但是有时候我们需要获取 runoob_author 字段含有 "COM" 字符的所有记录,这时我们就需要在 WHERE 子句中使用 SQL LIKE 子句。
SQL LIKE 子句中使用百分号 %字符来表示任意字符,类似于UNIX或正则表达式中的星号 *。
如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。
语法:
SELECT field1, field2,...fieldN
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
- 你可以在 WHERE 子句中指定任何条件。
- 你可以在 WHERE 子句中使用LIKE子句。
- 你可以使用LIKE子句代替等号 =。
- LIKE 通常与 % 一同使用,类似于一个元字符的搜索。
- 你可以使用 AND 或者 OR 指定一个或多个条件。
- 你可以在 DELETE 或 UPDATE 命令中使用 WHERE...LIKE 子句来指定条件。
9.union操作符
MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
语法:
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
#example
#注意:使用union,会自动使用第一个表的列名为列名,排序也只能对列1进行排序。
SELECT 列名称1 FROM 表名称1 UNION SELECT 列名称2 FROM 表名称2 ORDER BY 列名称1;
SELECT 列名称1 FROM 表名称1 UNION ALL SELECT 列名称2 FROM 表名称2 ORDER BY 列名称1;
- expression1, expression2, ... expression_n: 要检索的列。
- tables: 要检索的数据表。
- WHERE conditions: 可选, 检索条件。
- DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
- ALL: 可选,返回所有结果集,包含重复数据。
select csj_author from csj_tbl UNION
select name from student;
10.排序
语法:
SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
- 你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
- 你可以设定多个字段来排序。
- 你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
- 你可以添加 WHERE...LIKE 子句来设置条件。
select * from csj_tbl order by csj_id desc;
#如果字符集采用的是 utf8(万国码),需要先对字段进行转码然后排序:
select * from csj_tbl order by CONVERT(csj_author using gbk) desc;
#如果字符集采用的是 gbk(汉字编码字符集),直接在查询语句后边添加 ORDER BY:
select * from csj_tbl order by csj_author desc;
11.mysql分组
GROUP BY 语句根据一个或多个列对结果集进行分组。
在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
GROUP BY 语法
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
准备数据
#创建表
DROP TABLE IF EXISTS `employee_tbl`;
CREATE TABLE `employee_tbl` (
`id` int(11) NOT NULL,
`name` char(10) NOT NULL DEFAULT '',
`date` datetime NOT NULL,
`singin` tinyint(4) NOT NULL DEFAULT '0' COMMENT '登录次数',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#插入数据
INSERT INTO `employee_tbl` VALUES ('1', '小明', '2016-04-22 15:25:33', '1'), ('2', '小王', '2016-04-20 15:25:47', '3'), ('3', '小丽', '2016-04-19 15:26:02', '2'), ('4', '小王', '2016-04-07 15:26:14', '4'), ('5', '小明', '2016-04-11 15:26:40', '4'), ('6', '小明', '2016-04-04 15:26:54', '2');
commit;
set foregin_key_checks=1;
set names utf8;
#使用group by语句将数据表按名字进行分组,并统计每个人有多少条记录
select name,count(*) from employee_tbl group by name;
#对name进行分组,只会打印每个name下的第一条信息
select * from employee_tbl group by name;
#按name分组,并统计不同name下的的行数
select count(*) from employee_tbl group by name;
12.with rollup 可以在group by的基础上再进行统计
select * from employee_tbl;
select name,count(*) from employee_tbl group by name with ROLLUP;
select name,SUM(singin),count(*),AVG(singin) from employee_tbl GROUP BY name WITH ROLLUP;
13.coalesce设置取代null的名称
语法:
select coalesce(a,b,c);
示例:
select COALESCE(name,"合计"),count(*) as 登陆次数 from employee_tbl group by name with ROLLUP;
select COALESCE(name,"合计") as name,SUM(singin),count(*),AVG(singin) from employee_tbl GROUP BY name WITH ROLLUP;
## 14.having一般跟在group by之后,执行记录组选择的一部分工作的
例如列出登陆次数大于2次。如果使用where 登陆次数 > 3,会因为表中没有“登陆次数”这列而报错,因为where只能对表中原有的列进行筛选。如果对group by生成的列筛选,需要用使having
```#sql
select COALESCE(name,"合计"),count(*) as 登陆次数 from employee_tbl group by name having 登陆次数 > 2;
```

FAQ
1.修改数据后,是否需要commit
#执行sql命令
show VARIABLES like '%autocommit%';
#如果是OFF即不自动commit,需要手动commit操作(命令行可以直接“commit;“命令),否则是自动commit。
2. foreign_key_checks;在mysql中设置外键约束
mysql中如果表和表之间建立了外键约束,则无法删除表以及修改表结构。
解决办法是在mysql中取消外键约束:set foregin_key_checks=0;
然后将原来表的数据导出到sql语句,重新创建此表后,再把数据使用sql导入。
然后再设置外键约束。 set foregin_key_checks=1;
3.使用distinct和group by去重的区别
distinct:
- distinct必须在所有列的前面
- distinct会针对列依次去重
group by: - 只能针对单列进行分组,不能在group by后面跟多个列
- 可以在去重的结果上进行运算
#distinct去重
select * from csj_tbl;
select DISTINCT csj_author from csj_tbl;
select DISTINCT csj_author,submission_date from csj_tbl;
select DISTINCT csj_author,submission_date,csj_id from csj_tbl;
#group by 分组
select * from employee_tbl;
select * from employee_tbl group by name;
select name,SUM(singin),count(*),AVG(singin) from employee_tbl GROUP BY name;
结果:
mysql-3 数据表的创建、增删改查的更多相关文章
- Python--day42--mysql操作数据库及数据表和基本增删改查
sql语法规则: 一.操作文件夹 1.创建数据库db2:create database db2; 2.创建数据库db2并标明数据库的编码格式为utf8:create database db2 defa ...
- Django框架之第二篇--app注册、静态文件配置、form表单提交、pycharm连接数据库、django使用mysql数据库、表字段的增删改查、表数据的增删改查
本节知识点大致为:静态文件配置.form表单提交数据后端如何获取.request方法.pycharm连接数据库,django使用mysql数据库.表字段的增删改查.表数据的增删改查 一.创建app,创 ...
- JQuery Easyui/TopJUI 用JS创建数据表格并实现增删改查功能
JQuery Easyui/TopJUI 用JS创建数据表格并实现增删改查功能 html <table id="productDg"></table> &l ...
- 用SpringBoot+MySql+JPA实现对数据库的增删改查和分页
使用SpringBoot+Mysql+JPA实现对数据库的增删改查和分页 JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述 ...
- django-orm框架表单的增删改查
08.14自我总结 django-orm框架 一.orm基本配置 1.创建django项目 命令行:cmd先去到django创建目录,然后输入django-admin startproject dja ...
- vue.js带复选框表单的增删改查
近段时间由于公司项目要求,前端开始使用VUE框架进行开发,最近刚开始学习,做了一个表单的增删改查,和大家分享一下. 页面模型代码设计如下 <template> <div id=&qu ...
- Online Coding开发模式 (通过在线配置实现一个表模型的增删改查功能,无需写任何代码)
JEECG 智能开发平台. 开发模式由代码生成器转变为Online Coding模式 (通过在线配置实现一个表模型的增删改查功能,无需一行代码,支持用户自定义 ...
- MySQL查看数据表的创建时间和最后修改时间
如何MySQL中一个数据表的创建时间和最后修改时间呢? 可以通过查询information_schema.TABLES 表得到信息. 例如 mysql> SELECT * FROM `infor ...
- mysql常用语句、命令(增删改查功能)
修改数据库的字符集 mysql>use mydb mysql>alter database mydb character set utf8;创建数据库指定数据库的字符集 ...
- Mysql学习笔记(六)增删改查
PS:数据库最基本的操作就是增删改查了... 学习内容: 数据库的增删改查 1.增...其实就是向数据库中插入数据.. 插入语句 insert into table_name values(" ...
随机推荐
- 原生DOM操作vs框架虚拟DOM比较
1. 原生 DOM 操作 vs. 通过框架封装操作. 这是一个性能 vs. 可维护性的取舍.框架的意义在于为你掩盖底层的 DOM 操作,让你用更声明式的方式来描述你的目的,从而让你的代码更容易维护.没 ...
- 谷歌开发者工具(F12)的使用小坑
python模拟登陆知乎,用开发者工具跟踪浏览器与服务器的交互,需要知道用户名,密码的字段名,可在文件email中看到:需要注意的是一定要 勾选 preserve log ,否则登陆之前的交互不会显示 ...
- [原][译][osgearth]样式表style中参数总结(OE官方文档翻译)
几何Geometry 高度Altitude 挤压Extrusion 图标Icon 模型Model 渲染Render 皮肤Skin 文本Text 覆盖Coverage 提示: 在SDK中,样式表的命名空 ...
- c++之to_string()函数
函数原型:string to_string (int val);string to_string (long val);string to_string (long long val);string ...
- JavaScript权威指南--WEB浏览器中的javascript
知识要点 1.客户端javascript window对象是所有客户端javascript特性和API的主要接入点.它表示web浏览器的一个窗口或窗体,并且可以用window表示来引用它.window ...
- vim with space-vim
space-vim https://github.com/liuchengxu/space-vim macOS # homebrew /usr/bin/ruby -e "$(curl -fs ...
- Toncat-OpenSSL双向认证配置(iOS)
OpenSSL生成证书 要生成证书的目录下建立几个文件和文件夹,有./demoCA/ ./demoCA/newcerts/ ./demoCA/private/ ./demoCA/index.txt ( ...
- jquery3.1.1报错Uncaught TypeError: a.indexOf is not a function
jquery3.1.1报错Uncaught TypeError: a.indexOf is not a function 使用1.9就没有问题,解决办法: 就是把写的代码中: $(window).lo ...
- 【css样式生成 & 图片合并压缩工具】Sprite,你值得拥有
好久好久没有更新博客了,越来越懒...话说懒也有懒的好处,懒的时候你可能会想着用些神马方法来帮你偷懒.没错,下面就给大家介绍个博主前不久开发的[css样式生成 & 图片合并压缩工具]Spirt ...
- NameError: name 'picamera' is not defined
/********************************************************************************* * NameError: name ...