MySQL知识总结

        服务软件:MySQL 或者Maria DB(二选一,MySQL收费,Maria DB免费)

操作软件:SQLYog

SQL端口:3306

环境变量:需配置装好MySQL的bin目录地址到系统变量Path中,我的电脑右键属性-高级系统设置

cmd小黑窗口快捷启动方式:

Maria DB启动小黑窗口:(应用程序4个中最下面一个黑色的程序启动)

CMD启动小黑窗口:

mysql -uroot -proot(第一种登录方式) 

2.1)mysql -uroot -p

2.1)  password (第二种登录方式

语法:mysql.exe执行文件

代表参数

-u 用户名user,紧接着写的

-p 密码password,紧接着写的

MySQL常见1251错误解决办法:

问题:1251 client does not support authentication protocol requested by server;consider upgrading Mysql client

ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'
问题原因:
主要是由于mysql8以前的加密规则与mysql8以后的存在差异。

解决办法:

1、首先mysql必须是装好了,可以通过管理员身份打开的cmd中在mysql文件(若已配置环境变量就无须)下输入:

net start mysql是否服务启用成功

服务启动成功之后,输入命令:mysql -u root -p(第一次登录没有密码,直接按回车过)!
然后在mysql>后按照如下步骤输入:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;

(#修改加密规则 )

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; 

(#更新一下用户的新密码为password)

FLUSH PRIVILEGES; 

( #刷新权限),完成这三步操作后用新的密码即可以登录。

CRUD:增删改查Create新增,Retrieve检索查询 ,Update修改更新,Delete删除

增: create database cgb2110 DEFAULT CHARACTER SET utf8; (创建表方式一)

        create database cgb211002 charset utf8;(创建表方式二)

        create table user(age int, name varchar(5)); (创建表)

        insert into user values(25,“tony”);(表中插入一条数据)

        insert into user values(25,“tony”),(28,“lucy”);(表中插入二条数据)

删: drop database cgb2110; (删除库)

        drop table user;(删除表)

        delete from user;(删除user表中的所有数据) 

        delete from  use where id=100;(删除表中id是100的这一条数据) 

改:update user set id=100,age=22 where name="zhangsan";(改name=zhangsan这条数据)  

       update user set id=100,age=18;(表所有数据修改成id=100,age=18,不改变数据条数)  

查:show databases; (展示所有库)

       use cgb2110;(使用表cgb2110)

       show tables; (展示所有表)

       desc user; (查看表结构)

       select* from user; (从user 这个表中查询所有数据)  

       select * from tb_door order by tel desc;(从tb_door表中按照tel降序查询所有数据,desc降序)

       select count(1) from user; (从user这个表中查询所有记录的条数)

*注意:插入数据:int类型数据不用引号,varchar和char类型要用英文""双引或者‘’单引包裹起来。

            快捷键:选中库或者表按F5刷新;输入语句后分号前按F9执行,或者选中语句按F9执行

1.增加列:alter table user add age varchar(30) ;(从user表中新增列age并且数据类型为varchar)

                 alter table user add column age varchar(30) ;(与上效果相同,两种均可,可加column)

2.修改列:alter table user modify column age varchar(8); (user表中改age列数据类型为varchar)

3.删除列:alter table user drop column age;(user表中删除age列,后面不可用 ,分开删除多列) 

4.修改列名:alter table user rename column age to address;(修改user表中的age列名为address)

5.修改表名:alter table user rename to admin;(将user表里将user的表名改为admin)

6.set names gbk;    出现乱码解决方案- 输入代码确认后然后关窗口,临时方案,重启小黑窗口失效

7.修改数据库名:alter database cgb2110 modify name=cgb2111;(数据库改名,新cgb2111)??

字段约束(创建表时针对某列进行设置):

唯一约束:create table user(id int unique,name varchar(10),age int);(创建id字段唯一约束)

                  INSERT INTO USER VALUES(1001,"jack",25);(OK,1 row(s) affected)

                  INSERT INTO USER VALUES(1001,"tony",28);(id不能相同NOK, 错误码: 1062
                  Duplicate entry '1001' for key 'user.id' )

                  INSERT INTO USER VALUES(1002,"tony",28);(ID不同,OK,1 row(s) affected)

非空约束:create table emp(id int not null,name varchar(10),age int);(创建id字段唯一约束)

                  INSERT INTO emp VALUES(1001,"lucy",20); (OK,1 row(s) affected)

                  INSERT INTO emp VALUES(NULL,"lili",28);(id为空,NOK, 错误码: 1048
                  Column 'id' cannot be null)

                  INSERT INTO emp VALUES(1002,'davida',30 );(id不为空,OK)

主键约束:CREATE TABLE employer(id INT PRIMARY KEY AUTO_INCREMENT,NAME   VARCHAR(10));(设置id为主键并自增,*注意主键列设置自增只能为int类型,设置主键不自增则可以为varchar类型)

                  INSERT INTO employer VALUES(NULL,"jack");(OK, id已经自增,设置null结果为1)

                    *设置主键后,后续插入值主键可以不用手动设置值。

数据类型


命名规则

  • 字段名必须以字母开头,尽量不要使用拼音
  • 长度不能超过30个字符(不同数据库,不同版本会有不同)
  • 不能使用SQL的保留字,如where,order,group
  • 只能使用如下字符az、AZ、0~9、$ 等
  • Oracle习惯全大写:USER_NAME,mysql习惯全小写:user_name
  • 多个单词用下划线隔开,而非java语言的驼峰规则

字符

  • char长度固定,不足使用空格填充,最多容纳2000个字符,char(11)存储abc,占11位。查询速度极快但浪费空间
  • varchar变长字符串,最多容纳4000个字符,varchar(11)存储abc,只占3位。查询稍慢,但节省空间。Oracle为varchar2
  • 大文本: 大量文字(不推荐使用,尽量使用varchar替代)

以utf8编码计算的话,一个汉字在u8下占3个字节

注:不同数据库版本长度限制可能会有不同

数字

  • tinyint,int整数类型
  • float,double小数类型
  • numeric(5,2) decimal(5,2)—也可以表示小数,表示总共5位,其中可以有两位小数
  • decimal和numeric表示精确的整数数字

日期

  • date 包含年月日
  • time时分秒
  • datetime包含年月日和时分秒
  • timestamp时间戳,不是日期,而是从1970年1月1日到指定日期的毫秒数

图片

  • blob 二进制数据,可以存放图片、声音,容量4g。早期有这样的设计。但其缺点非常明显,数据库庞大,备份缓慢,这些内容去备份多份价值不大。同时数据库迁移时过大,迁移时间过久。所以目前主流都不会直接存储这样的数据,而只存储其访问路径,文件则存放在磁盘上。

SQLYog报错1064解决办法:

现象如下,执行任何一个语句,均报错,但大多能在报错后返回结果

查看日志,发现sqlyog给所有的查询都同时执行了explain extended

在这里插入图片描述

在mysql 5.7或更早的版本内,这么做可以得到详细的执行扩展信息(SQLYog不仅仅会执行查询,还会向你展示性能等扩展情况),但mysql 8里,经过查阅文档发现,已经改为了直接使用explain,不含extended的语句
后来在sqlYog里找到 工具-选项-增强工具,取消explain扩展信息的勾选

在这里插入图片描述

之后就不会再遇到这个问题了

基础函数

lower        select 'ABC',lower('ABC') from dept; --数据转小写,显示字段名'ABC' 和‘lower('ABC')’;

                 select 'ABC' a,lower('ABC') b from dept; --数据转小写,转前后分别设置别名a和b显示
upper       select upper(dname) from dept --数据转大写,表头字段名显示upper(dname)
length      select length(dname) from dept --数据的长度,表头字段名显示length(dname)
substr      select dname,substr(dname,1,3) FROM dept; --截取[1,3],从第1个字符开始截取3个。
concat     select dname a,concat(dname,'123')b from dept --拼接数据123,显a原别名,b新别名
replace    select dname,replace(dname,'a','666') X from dept --把a字符替换成666,设置别名X

                 select dname a,replace(dname,'a','666') X from dept --功能同上,原别名a,转后别名X
ifnull        select ifnull(comm,10) comm from dept2--判断,如果comm是null,用10替换,设别名comm

2021.11.25

 一般where不能用别名

多表联查,where可以用别名,where没有什么要求

多条语句间不用;    可以选中再执行

封装:提高代码复用性, 高内聚

*调用空对象的方法抛出空指针异常; 对象==null,未赋值调用 常出现的Bugs常考 ,

提高了代码的健壮性。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值