mysql知识初篇(一)

mysql介绍 (1) mysql数据库是瑞典AB开发。 (2) mysql--> sun --> oracle。 (3) mysql数据库的特点。 1. 开源。 2. 免费。 3. 跨平台(windows/linux/unix/苹果)。 4. 处理并发性(13000个)/安全/稳定。 5. 该数据库 轻(对资源要求不高)安装文件 37.7M。而且 对cpu/内存要求都不高 基本语法: 在dos下输入: mysql -u 用户名 -p 密码 特别说明 -p 后面的密码不要有空格 /使用该命令的时候,需 要配置一下环境变量 2. mysql数据库也提供图形化界面来登录以及操作。 3. 如何在mysql中创建数据库 基本语法: create database mydb1 ; --创建一个mydb1的数据库 create database mydb2 character set utf8 ; --创建一个 使用utf-8字符集的mydb2的数据库 create database mydb3 character set utf8 collate utf8_general_ci 如何查看,创建数据库的指令 show create database 数据库名; 显示数据库 指令: show database ; 查看创建数据库的指令 drop database uuu ; ----删除数据库 如何使用某个数据库: use mydb1 ----use 数据库名 -------如何创建一个数据表 create table users( id int , ---学号 name varcahr(30) ---名字 ) 如何备份数据库和回复数据库: ------ 该指令,需要在dos控制台下直接执行。 mysqldump -u root -p密码 数据名 > 存放路径+文件名.sql。 举例子: mysqldump -u root -p123 myshop > D:\myshop.sql 数据库的恢复; mysql> source d:/myshop.sql 恢复数据库: 1.创建一个数据库mydb2,但是这个数据库目前是空 2.mysql控制台,使用source备份文件路径、 mysql分页技术: select * from 表名 limit start(从第几条取出),取出几条 .创建表 基本语法: create table 表名( 列名 列的数据类型 , .... ){ //后面可以设置字符集 character 字符集名称 collate 校对规则 } 案列: 创建一张用户表 create table users( id int , name varchar(64), pwd varchar(64), birthday date )

mysql的数据类型:

数值型: 1. bit(M) m默认为1 最大64 ---最大能存储八字节的数 -----这部分是整型 2. tinyint signed/unsigned 取值范围为: 这是对于有符号 -128-127,对于无符号而言,取值范围为: 0-255,其实说明白 了就是占一个字节。 3.smallint 占两个字节也分为有符号和无符号两种。 4.mediumint 占3字节也分为有符号和无符号两种。 5. int 占4字节 分有符号和无符号 6. bigint 占8字节 分有符号和无符号两种。 7. float 占4字节来表示 格式: Float(m,d)[unsigned] m: 表示位数 ,d 表示小数点有几位 8. double 占8个字节 其用法类似float,只是表示的范围更大,也是定长。 9. numeric( m ,d ) 用于表示小数,或者整数。 10.decimal(m ,d)属于变长。 对于文本和二进制类型: 常用的有: (1)char(m) m范围是0-255,定长 eg: char(20)如果你存放,'abc' ,实际在表中的存在形 式为:‘abc【17个空格】’ 小知识: mysql自带的client默认支持utf8码,所有我们在添加中文的 时候,需要设置让client支持gbk. *show variables like '%char%'* //显示关于字符的设置参 数 (2)varchar(m) m表示大小 范围 0-65535 变长 varchar(20)如果你存放 'abc'字串,实际在表中存在形式‘abc’ 建 议: 如果表的某列长度固定,比如 产品编号,学号,而且 在255内,我们应当使用char,如果长度不能取得,或者长度大于 255,小于65535,则使用varchar。 (3)text 该类型,可以表示更大的字串、 (4)日期类型: 1. date (日期:年-月-日) 对于date只保留 年-月-日 2. datetime 对于datetime。保存 年月日,时分秒 3. timestamp 邮戳: 该类型可以保存 年-月-日 : 时分秒 它和datetime最大的区别是,当你upda某条记录的时候,该列 值,会自动更新。 -------- 建议: 如果不知道该不该用timestamp,就不要用 *修改新的列 alter table 表名 add 列名 数据类型 ----修改列(列的类型和大小) alter table 表名 modify 列名 新的数据类型 ----删除某列 alter table 表名 drop 列名 0. 在上面的员工表的基本上增加一个image列 1. 修改job列,使其长度为60 2. 删除sex列 3. 表名改为user 4. 修改表的字符集为utf8 5. 列名name修改为username alter table user change column name username varchar(20); 使用insert语句向表中插入数据。 1、insert into 表名 [列名...] values(值...); 2、update 表名 set 列名=表达式... where 条件 说明:如果where 后面没有条件,则相当于对整个表进行操作。 3、delete from 表名 where 条件, 注意: 如果不使用where子句,将删除表中所有数据。 所有要小心使用 注意事项: 1. Delete语句不能删除某一列(可使用 Update) 2.使用delete语句仅删除记录,不删除表本身。如果删除表 ,使用(drop语句) 3.同insert和update一样,从一个表中删除记录将引起其它 表的参照完整性问题,在修改数据库数据时,头脑中应该始终不 要忘记这个潜在的问题。 4.删除表中数据也可使用Truncate table语句,它和delete 有所不同、 ---truncate table 表名 ,可以删除表的记录,速度快,但 不能回滚。 4. 在mysql中事务的一个特殊说明: (1). mysql控制台是默认自动提交事务(dml) (2). 如果我们要在控制台使用事务,应该这样 首先这样设置: set autocommit=false; 设置一个保存点: savapoint AA; 回滚: rollback to AA; 5. select 语句 select 列名....from 表名 where 条件 注意事项: * select 指定查询乃邪恶列的数据 * column指定列名。 * 号代表查询所有列 select * from 表名。 * from 指定查询那张表 * Distinct可选,指显示结果时,是否剔除重要数据。 select distinct * from book ; ---使用where子句,进行过滤查询。 ---like语句中,%代表0个或者多个任意字符,_代表一个字符。 使用order by子句排序查询结果,子句应位于select语句的结尾。 select column1,column2,column3..from table order by column asc|desc ; ASC: 升序 Desc 降序; count语句,统计 统计一个班级共有多少学生 select count(*) from student where grade>90 ; 合计函数 sum sum函数返回满足where条件的行的和 1. 统计一个班级数学总成绩? select sum(math) from student; 2. 统计一个班级语文,英语,数学各科的总成绩 select sum(math),sum(english),sum(chinese) from student; 3.统计一个班级语文,英语,数学的成绩总和。 select sum(math+english+chinese) from student; 4.统计一个班级语文成绩平均分 select sum(chinese)/count(*) from student ; 注意: 1. sum仅对数值起作用。否则会报错。 avg的用法: 1. 求一个班级数学平均分: select avg(math) from student ; 2. 求一个班级总分平均分 select avg(math+english+chinese) from student; 合计函数---MAX/MIN i. 求班级最高分合最低分(数值范围在统计中特别有用) select max(english+math+chinese) from student; select语句(6) 1. ---使用group by 子句对列进行分组 1. select [列名] from 表名 group by 列名 ; 2. ---使用having子句过滤 select [列名] from 表名 group by 列名 having ... (1). 对订单表中商品归类后,显示每一类商品的总价 select product ,sum(price) from goods group by product; 注意: Having 和where 均可实现过滤,但在having可以使 用合计函数,having通常跟在group by后,它作用于组: group by...having....order by ... 请查询出,两个小时内,发布的消息: select * from message where data_add(publishdate,interval 2 hour)>=now(); 特别说明: date_add(日期/date/datetime/timestamp , interval 数 type); 特殊用法: 1. 把一张表中的Name属性的第一个字母大写,其他全部小写, 怎么办? select UCASE(SUBSTRING(LCASE('simth'),)) from dual ; //首先把‘smith’的首字母取出 ucase(substring('smith',1,1)); //把‘smith’去掉首字母后,余下的部分取出转成小写 l、case(substring(substring('smith',2,length('smith')-1)); //最后拼凑 select concat(ucase(substring('smith',1,1))lcase(substring ('smith',2,length('smith')-1))) from dual ; 对于mysql的常见约束 (1).primary key 特点:主键是用于唯一标识一条记录的约束,一张表,最多 只能有一个主键,主键不能为null,也不能重复。 create table user1 (id int primary key,name varchar(32)); (2).auto_increment 可以自增长。 举例: create table user2(id int primary key auto_increment, name varchar(32)); (3).unique ( 唯一约束 ) 特点:表的某列的值,不能重复,可以为null create table user3( id int unque, name varchar(32) ); (4)not null (非空) mysql 的表的列,默认情况下可以为null,如果不允许某列为 空,则可以使用not null说明 create table user5( id int primary key , name varchar(32) not null ); (5)外键 foregn key 从理论上说明,我们先建立主表,再建立从表 --部门表 create table dept( id int primary key , name varchar(32),); insert into dept value(1,'财务部'); ---雇员表 create table emp( id int primary key, name varchar(32), ) deptid int reference dept(id); //上面的建立外键的写法是错误的 应该这样(表级定义) create table emp( id int primary key , name varchar(32), depid int , constraint emp_fk foreign key(deptid) references dept(id); ) 小结外键: (1).外键只能指向 主表的主键列 ,或者 unique (2).外键的数据类型和它指向的列的数据类型一样 (3).外键的值,要么为空要么是指向的那列中存在的值。 (4).外键可以指向本表的主键列,或者unique 产品分类: create table producttye( id int primary key , catagory varcahr(32), parentId int , constraint type_fk foreign key(paranetid) references producttype(id); ) insert into value(1,'张三',2); * check create table user7(age int check(age>12)); 补充讲解mysql分页查询: 返回第四条----第七条记录 select * from student limit 3,4 基本语法: select * from 表名 where 条件 .... limit从第几条取,取出几条,从第几条取,这里mysql从0开始编号; * 安装语文成绩排序,查询出第3名到第5名 select * from student order by chinese desc limit 2,3 扩展,分页:pageNow ,pageSize select * from 表名 where 条件[group by....having...order by...]limit(pageNow-1)*pageSize; pageSize;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏猿人谷

mybatis调用视图和存储过程

    现在的项目是以Mybatis作为O/R映射框架,确实好用,也非常方便项目的开发。MyBatis支持普通sql的查询、视图的查询、存储过程调用,是一种非常...

32550
来自专栏恰童鞋骚年

走向面试之数据库基础:三、SQL进阶之变量、事务、存储过程与触发器

  SELECT 以表格的方式输出,可以同时输出多个变量;而PRINT 则是以文本的方式输出,一次只能输出一个变量的值。

10320
来自专栏不想当开发的产品不是好测试

mysql @value := 用法

背景 有这么一张表,记录名字和分数,现在需要按照成绩排名,存在并列名次的情况 ? 解决方法 思路:按照score从大到小排序,第一行数据就是第一名,第二行就是第...

29480
来自专栏Java进阶之路

IK分词器访问远程词典功能实现

IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本。最...

33620
来自专栏Kevin-ZhangCG

Oracle学习笔记一

Oracle数据库是数据的物理存储。这就包括(数据文件ORA或者DBF、控制文件、联机日志、参数文件)。其实 Oracle数据库的概念和其它数据库不一样,这里...

12320
来自专栏恰童鞋骚年

走向面试之数据库基础:二、SQL进阶之case、子查询、分页、join与视图

  假设我们有一个论坛网站,其中有一张User表{ UId,Name,Level },Level是一个int类型,代表了用户等级类型,例如:1代表骨灰,2代表大...

10120
来自专栏圣杰的专栏

SQL递归查询知多少

最近工作中遇到了一个问题,需要根据保存的流程数据,构建流程图。数据库中保存的流程数据是树形结构的,表结构及数据如下图: ? 仔细观察表结构,会发现其树形结构的特...

51480
来自专栏zingpLiu

python【第十二篇下】操作MySQL数据库以及ORM之 sqlalchemy

  对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程...

11410
来自专栏数据和云

90%的面试者都不知道这道题的答案

小编寄语 亲爱的DBA同胞们,你们是否记得在你找工作时,印象最深刻的面试题呢?那些看似简单的题目,实则蕴藏很大的玄机。今天我们通过一道经典的 ORacle DB...

29260
来自专栏信安之路

sqlmap自带的tamper你了解多少?

sqlmap 是一款注入神器广为人知,里面的 tamper 常常用来绕过 WAF ,很实用的模块,但是却常常被新手忽略(比如我),今天就整理总结一下 tampe...

11600

扫码关注云+社区

领取腾讯云代金券