mysql -u root -p密码
create database 数据库名;
create database 数据库名 character set 编码;
show databases;
show create database 数据库名;
drop database 数据库名;
use 数据库名;
select database();
primary key
unique
not null
constraint constraint_name foreign key(外键字段名) references 主表(外键字段名) on delete action(restrict | cascade | set null | no action) on update action(restrict | cascade | set null | no action)
create table city_innodb( city_id int NOT NULL AUTO_INCREMENT, city_name varchar(50) NOT NULL, country_id int NOT NULL, primary key(city_id), key idx_fk_country_id(country_id), CONSTRAINT 'fk_city_country' FOREIGN KEY(country_id) REFERENCES country_innodb(country_id) ON DELETE RESTRICT ON UPDATE CASCADE )ENGINE=InnoDB DEFAULT CHARSET=utf8;
show tables;
desc 表名;
drop table 表名;
alter table 表名 add 字段名 类型(长度) 约束;
alter table 表名 drop 字段名;
alter table 表名 change 字段名 新字段名 类型(长度) 约束;
alter table 表名 modify 字段名 类型(长度) 约束;
alter table 表名 character set 编码;
rename table 表名 to 新表名;
insert into 表名(字段1,字段2,......,字段n) values(值1,值2,......,值n);
insert into 表名 values(值1,值2,......,值n);
update 表名 set 字段名=值;
update 表名 set 字段名=值 where 条件;
delete from 表名;
delete from 表名 where 条件;
delete from 表名和truncate table 表名 删除记录的区别?
truncate table 表名;
这种删除方式是不能加where条件的,只能全部删除。select distinct(字段名) | * | 字段名1,字段名2,......,字段名n from 表名 [where 条件]
select * from 表名;
select pname,price from product;
select * from product [as] p;
select pname [as] p1,price [as] p2 from product;
别名中的as是可以省略的,一般都省略。
select distinct(字段名) from 表名;
select price+10 from product;
>
>=
<
<=
=
<>
between a and b
in (23,34,45)
like
_
:表示一个字符%
:表示任意个字符(可以是0个字符)is null
and
:多个条件同时成立or
:多个条件任意一个成立not
:条件不成立。
select * from product where not (price>10)
:表示查询price>10这一条件不成立的商品信息。select * from 表名 [where 条件] order by 字段名 asc | desc
sum(字段名)
:求和avg(字段名)
:求平均数count(字段名)
:求个数。count()里面是可以写字段名,也可以写*聚合函数不统计null值。
select * from 表名 where 查询条件 group by 字段名 having 分组条件;
select cid,count(*) from product group by cid;
select cid,avg(price) from product group by cid having avg(price) > 20000;
select * from 表名 where 查询条件 group by 字段名 having 分组条件 order by 字段名 asc | desc;
Class.forName("com.mysql.jdbc.Driver");
:这种是推荐写法DriverManager.registerDriver(new com.mysql.jdbc.Driver())
:这种写法不推荐,因为这种写法有缺点
Connection conn=DriverManager.getConnection(url,username,password);
Statement stmt=conn.createStatement();
int executeUpdate(String sql);
:执行insert、update、delete操作,返回影响的行数ResultSet executeQuery(String sql);
:执行查询操作,返回查询到的结果集boolean execute(String sql);
:
boolean next()
:该方法返回一个boolean类型的数据,如果遍历到了行末尾,那么就会返回false,否则就会返回true。resultSet.getInt("cid");
(获取字段名为cid的数据)resultSet.getInt(1);
(获取当前行第一列的数据,columnIndex从1开始)Object getObject(String columnName | int columnIndex)
:如果不知道获取的数据是什么类型,就是用getObject()方法,返回一个Object类型的对象。int getInt(String columnName | int columnIndex)
:如果知道要获取的数据是int类型,那么就可以使用该方法。一定要能确保获取到的数据是int类型,下同。String getString(String columnName | int columnIndex)
:如果知道获取的数据时String类型,那么就可以使用该方法。double getDouble(String columnName | int columnIndex)
:如果知道获取的数据时double类型,那么就可以使用该方法。@Test public void test1(){ Connection conn=null; Statement stmt=null; ResultSet resultSet=null; try { //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //获得连接 conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/w eb08","root","pgmx0835"); //编写 SQL 语句并执行 String sql="select * from category"; stmt=conn.createStatement(); resultSet = stmt.executeQuery(sql); //处理执行结果 while(resultSet.next()){ //获取查询到的数据 Integer cid=resultSet.getInt(1); String cname=resultSet.getString(2); System.out.println("cid="+cid+",cname="+cname); } } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); }finally{ try { //释放资源 //注意:释放资源要按照创建顺序的逆序来释放 if (resultSet != null) { resultSet.close(); } if(stmt!=null){ stmt.close(); } if(conn!=null){ conn.close(); } }catch(SQLException e){ e.printStackTrace(); } } }
PreparedStatement prepareStatement(String sql)
,创建时,要把SQL语句传入,因为要预处理。setXXX(int parameterIndex,Object value)
select * from 表名 limit 2,5;
:表示从第3条记录开始查询,一共查询5条记录。也就是查询第3,4,5,6,7条记录。