mysql

mysql (开发)

报错

因为之前安装过mysql,没卸干净,因为不知道什么原因一直报错,现在说一下解决方法

首先删除mysql服务 sc delect mysql (可以先查询一下sc query mysql)

然后在安装时的mysqld -install 执行之后查看任务管理器的服务,找到mysql

右键查看详细信息,找到mysqld查看属性,看看是不是你新安装的mysql路径

不是的话先设置环境变量,然后重启即可

安装

zip包, 创建my.ini

[mysqld]
basedir=路径
datadir=路径\data\
port = 3306
skip-grant-tables

管理员启动cmd,mysqld -install

mysqld --initialize-insecure --user=mysql初始化

net start mysql 启动服务

mysql -u 用户名 -p 默认密码为空

update mysql.user set authentication_string=password('123456') where user='root' and Host='localhost';

flush privileges 刷新权限

修改my.ini 删除 skip-grant-tables

net stop mysql

net start mysql

基本操作

-- 注释后面的语句 /**/多行注释

create database if not exists asd

drop database if exists asd

列类型

tinyint 1字节

smallint 2

mediumint 3

int 4

bigint 8

float 4

double 8

decimal

char 0-255

varchar 0-65535

tinytext

text

data YYY-MM-DD

TIME HH: MM:SS

datatime

timestamp 时间戳

year

字段属性

unsigned

无符号整数

zerofill

使用0填充

自增

auto increment

语法

create table if not exists `student`(
	`id` int(4) not null auto_increment comment '学号',
    `name` varchar(30) not null default '匿名' comment '姓名',
    `pwd` varchar(30) not null default '123' comment '密码',
    `name` varchar(30) not null default '匿名' comment '姓名',
    primary key(`id`)
)engine=innodb default charset=utf8

show create database 名称

show create table 名称

desc table

在物理空间中的存储位置

InnoDB 在数据库表中只有一个*.frm文件,以及上级目录下的ibdata1文件

MYISAM对应文件

*.frm 表结构的定义文件

*.MYD 数据文件

*.MYI 索引文件

字符集编码

charset=utf-8 默认为latin1

修改

alter table 旧表名 rename as 新表名

alter table             add age int(11)

alter table        modify age varchar(11)    //修改约束

alter table        change age age1 int(1)   //重命名

alter table           drop age1

数据管理

外键 (最好不用)

create table if not exists `student`(
	`id` int(4) not null auto_increment comment '学号',
    `name` varchar(30) not null default '匿名' comment '姓名',
    `pwd` varchar(30) not null default '123' comment '密码',
    `name` varchar(30) not null default '匿名' comment '姓名',
    `gradeid` int(10) not null comment '年级'
    primary key(`id`)
    key `FK_gradeid` (`gradeid`),
    constraint `FK_gradeid` foreign key (`gradeid`) references `grade` (`gradeid`)
)engine=innodb default charset=utf8

constraint FK_gradeid foreign key (gradeid) references grade (gradeid)

约束名 外键 引用表

先删除有外键的表,再删除被引用的表

添加

insert into 表名(字段,字段) values (‘值’,’值2’),(),()

修改

update 表名 set 字段=’值’ where id=1;

set 字段=‘值’,字段=”值” where name=’’ and id=’’

<>或!=
between … and .. ///where id between 2 and 5
and
or

删除

delect from student –不影响自增

truncate table test – 自增归零

InnoDB 自增列会重1开始(内存当中的,断电即失)

MyISAM 继续从上一个自增量开始(存在在文件中)

查询

select * from student

select id as a,name as b from student as c (别名)

select concat(‘姓名:’,name) as d from student

select distinct id from result; 去除重复的id

where的条件字句

% 匹配0或多个 _匹配一个

select id,name from student where name like ‘刘%’

select id,name from student where id in (100,101,102)

联表查询

join on 条件

select b.id,b.name from teacher as a left join feifei as b on a.id=b.id;

有重复字段名要设置别名

left join 返回左边表那么多行的数据,没有也要返回NULL,有则被截断
right join 返回右边表那么多行的数据,没有也要返回NULL,有则被截断
inner join

分页查询

select id from student where name = ‘123’ order by id desc (降序)

select id from student where name = ‘123’ order by id asc (升序)

order by 字段 按什么排序

limit 0,5 (下标0开始,5个数)

子查询

select id from student where id=(select id from result where name='asd')

函数

感觉sql注入用不上,就算了

事务 ACID原则

要么都成功,要么都失败

数据不会丢失,数据完整性保持一致

事务一旦提交则不可逆,被持久化到数据库中

不被其他人的操作所影响,所以事务之间要相互隔离

脏读

一个事务读取了另外一个事务未提交的数据

不可重复读

多次读取,结果不同(不一定是错误,知识某些场合不对)

幻读

一个事务内读到了别的事务插入的数据,导致前后读取不一致

索引

primary key 主键索引

unique key 唯一索引

key /index 常规索引

FullText 全文索引

用户

create user zero identified by '123456'

set password = password('123456')

set password for zero = password('123456')

rename user zero to zeropeach

grant all on *.* to zero

show grants for zero

revoke all on *.* from zero

备份

拷贝物理文件

mysqldump

mysqldump -h 主机 -u 用户名 -p 数据库 表名 > 位置
然后输入密码

mysqldump -h localhost -u root -p test teacher > 1.sql

也可以连远程

导入

source 1.sql

三大范式

每一列不可再分

每张表只描述一件事情

每一列数据都与主键直接相关,而不能间接相关

jdbc

jdbc:mysql://localhost:3306/数据库名

package basic.mysql;

import java.sql.*;

public class jdbcfirst {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");

        String url = "jdbc:mysql://localhost:3306/con?useSSL=true";

        String user = "root";
        String password = "root";
        Connection connection = DriverManager.getConnection(url, user, password);
        Statement statement = connection.createStatement();

        String sql = "select id from student";
        ResultSet resultSet = statement.executeQuery(sql);
        while(resultSet.next()){
            System.out.println("id"+resultSet.getObject("id"));
        }
        resultSet.close();
        statement.close();
        connection.close();

    }
}

对象

statement 执行sql对象

statement.executeQuery()

//获取指定数据类型
ResultSet.getObject()
ResultSet.getString()
ResultSet.getInt()
ResultSet.getFloat()
ResultSet.getDate()
resultSet.beforeFirst() 最前面
afterLast()  最后面
next()    //下一个数据
previous()     //前一行
absolute(row)   //指定行
resultSet.close()
statement.close()
connection.close()

statement对象

statement.executeQuery (查询)

statement.executeUpdate (增删改)

preparestatement对象

String sql = "insert test values(?,?,?,?,?)"

st = conn.prepareStatement(sql);    //预编译,不执行
st.setInt(1,4);
st.setString(2,"asd");

st.setString(第几个,值)

使用preparestatement会把传入的数据当成字符,能够防止sql注入

连接池

dbcp

c3p0

都是Datasource 数据源


mysql
https://zer0peach.github.io/2023/11/03/mysql/
作者
Zer0peach
发布于
2023年11月3日
许可协议