• 締切済み

MYSQL追加入力perare構文を教えてください

create table sample( id int not primary key auto_increment, kokyaku_cd int(12), kokyaku_name varchar(32), index(kokyaku_cd) )engine=innodb; (sample.kokyaku_cd 外部キーの親キーと設定しています 子キーcreate table sample_1は記入しません (forgine key (kokyaku_cd) references sample (kokyaku_cd) on update cascade on delete cascade) insert into sample_1_1( kokyaku_cd,kokyaku_name) values (1,'佐々木’), (2,'田辺'); sample_1_1 データ50カラム入力後 単価カラムを追加します alter table sample_1_1 mofiy column tanka int(12); tankaカラム入力時 update文では50行入力は 安全性もあり困難な為 perare構文で一括入力を希望します(適切か分かりません) perare up_sql from 'update sample_1_1 set tanka=? where kokyaku_name=?'; set @a='10000'; set @b='佐々木'; excute up_sql using @a,@b; エラーは出ないのですが、入力すべて0で結果が反映されていません (tankaがNULLのままです) 複数入力する方法と上記構文が間違っているようであれば 教えていただけないでしょう 独学の為トンチンカンな構文かもしれませんが 教えていただけないでしょうか よろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数0

みんなの回答

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.1

コマンドラインの mysql client からの実行なのでしょうか? きちんと多バイト文字が一致できていないのでは? mysql client の文字コード設定とか、データベース側文字コード設定とか、sql ファイルで流しこんでいるなら、sqlファイルの保存時文字コードとかご確認下さい。 ascii文字(単バイト文字)だけの行も作ってみて、意図通りに実行できているのかも確認してみると文字コード問題なのか別の原因かも絞り込めるでしょう。

関連するQ&A

  • JavaからMySQL-DBへのデータ更新について

    JAVA から JDBC を経由して MySQL のデータを更新する方法 について質問があります。 MySQL使用者の初心者です。 ここで、データベース(sample_table)は以下のようになっているものとします。 | num | name | | 1  | 太郎 | | 2  | 次郎 | | 3  | 三郎 | num・・・int型 name・・・・varchar型 例えば num = 1 の name を変えたい場合 String qry = "UPDATE sample_table SET name = '花子' WHERE num = '1'"; st.executeUpdate(qry); 等のようにする事は分かっています。 しかし Javaのプログラムにおいて事前に String str = "花子"; のように指定しておいて String qry = "UPDATE sample_table SET name = " + str + "WHERE number = '1'"; st.executeUpdate(qry); とすることが出来ません。 (データベースがvarchar型で、指定しているのがString型だからでしょうか???) やはり Javaのプログラムで事前に指定したものを MySQLのデータベースに更新する事はできないのでしょうか? あるいは、構文のミスで(エラーには構文ミスと出てきます) 何か他の方法があるのでしょうか? 初心者なもので、どうすれば解決できるのか非常に困っております。 ご存知の方いらっしゃいましたら、御指導・御教授願います。 宜しくお願いいたします。

    • ベストアンサー
    • Java
  • SQL構文でカラム名をハッシュのキーに

    PerlをDBIでMySQLに接続しています。 MySQLの“country”テーブルに“name_en”カラムがあり、これをハッシュのキーにして、 下記構文で“name_jp”カラムに文字列を挿入しようとしたのですが、 ----------------------------------------- $sth = $dbh -> prepare ("update country set name_jp = \'$name{name_en}\' where id between 1379 and 1396"); ----------------------------------------- 結果は何も入りませんでした。 カラム名をハッシュのキーにするには、どう書けばいいのでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Perl
  • MySQLのFOREIGN KEYについて

     MySQLのFOREIGN KEYについて質問です。 下記のようにitemテーブルを作ってからarrivalhistoryテーブルを作ろうとすると ERROR 1005 (HY000): Can't create table 'xxx_db.arrivalhistory' (errno: 150) というエラーが出てしまいます。 自分でもForeign keyの作り方等調べてはみたのですが、 上手く解決することができません。 どなたかアドバイス下さい。お願いします。 ・親 create table item ( id bigint not null primary key, itemno VARCHAR(50) ) engine=InnoDB; ・子 create table arrivalhistory( id int primary key, itemno varchar(50), arrivaldate date, index(itemno), foreign key(itemno) references item(itemno) on update cascade on delete cascade ) engine=InnoDB;

    • ベストアンサー
    • MySQL
  • FOREIGN KEYの追加について。

    FOREIGN KEYの追加について。 MySQL5.1.37 CREATE TABLE `goods` ( `id` int NOT NULL AUTO_INCREMENT, `num` int NOT NULL DEFAULT '1', PRIMARY KEY (`id`), index (`num`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `sales` ( `id` int NOT NULL AUTO_INCREMENT, `num` int NOT NULL DEFAULT '1', PRIMARY KEY (`id`), index (`num`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 上記のようなテーブルを作り、salesテーブルにCSVファイルからデータをインポートしたのち、FOREIGN KEYを子テーブルに追加したいのですが、下記のようなエラーになります。 ALTER TABLE `sales` ADD FOREIGN KEY ( `num` ) REFERENCES `test`.`goods` ( `num` ) ON UPDATE CASCADE ; MySQLのメッセージ: ドキュメント #1452 - Cannot add or update a child row: a foreign key constraint fails (`test`.`#sql-561_cf`, CONSTRAINT `#sql-561_cf_ibfk_1` FOREIGN KEY (`num`) REFERENCES `goods` (`num`) ON UPDATE CASCADE) データをインポートしたのちにFOREIGN KEYを追加するにはどのようにしたらいいのでしょうか?

  • [MYSQL]TIMESTAMPをWHERE句に指定しUPDATEする方法

    以下のようにテーブルを作成し、TIMESTAMP型のカラムをキーにUPDATEをしたいと考えています。 create table test(time timestamp, amount int); insert into test values('2008-01-07 19:15:12',0); update test set amount = -1 where time = '2008-01-07 19:15:12'; ところがMYSQLではUPDATE後、TIMESTAMPのカラムが2008年から2009年に変化します。ORACLEで試しましたが、TIMESTAMP型のカラムは変わりませんでした。 +---------------------+--------+ | time | amount | +---------------------+--------+ | 2009-06-30 10:04:53 | -1 | +---------------------+--------+ MYSQLの独自の仕様があるのでしょうか? MYSQL 5.1.35(mysql-essential-5.1.35-win32.msi) Windows 2003 Server Standard Edition R2 MYISAM

    • ベストアンサー
    • MySQL
  • MySQL VIEW連結時の設定

    テーブル名 : table1 カラム1 : id(int) カラム2 : table2_id(int) テーブル名 : table2 カラム1 : id(int) カラム2 : time(int) ← phptaimestamp この二つをviewとして連結したいです。 table1.table2_id と table2.id をキーにするとして、問題はtable2.dateの中身がphpのtimestampで格納されている事です。 VIEW上で連結した際に、このtable2.dateのphpで吐いたtaimestampを通常の20131015の様な変換を加えたいのですが、MySQLの中で完結する方法はあるのでしょうか? 長文で申し訳ありませんが、アドバイス宜しくお願いします。

    • ベストアンサー
    • MySQL
  • MySQLでのテーブル作成

    MySQLでこういったテーブルを作成したのですが、 CREATE TABLE NOSGI ( GNRE_CD CHAR(5) NOT NULL, GNRE_NAME VARCHAR(20) NOT NULL, PRIMARY KEY (GNRE_CD) ); GNRE_CDはCHAR型で作成したのに、カラムの情報を見ると、 VARCHAR型にしまうのですが、どうしてでしょうか?

  • MySQLのエラーの意味

    お世話になります。 | Field | Type | Key | ------------------------------ | ID | int(11) | PRI | | NAME | varchar(50) | | | BIKO | varchar(100) | | とテーブルを作成し、 データの中身を | ID | NAME | BIKO | +----+--------+------+ | 1 | あああ | なし | | 2 | いいい | | | 3 | ううう | なし | と作成しました。 このテーブルを元に同じデーブルに新しいテーブルを作成しようと思っているのですが、 1)INSERT INTO kadai_table (ID,NAME) SELECT ID , NAME FROM kadai _table; とすると Duplicate entry '1' for key 1 というエラーがかえってきます。 2)INSERT INTO kadai_table (ID,NAME,BIKO) SELECT ID , NAME , BIKO FROM kadai _table; とすると Duplicate entry '0' for key 1 というエラーで テーブルが | ID | NAME | BIKO | +----+--------+------+ | 1 | あああ | なし | | 2 | いいい | | | 3 | ううう | なし | | 0 | あああ | なし | となってしまいます。 3)INSERT INTO kadai_table (ID,NAME) SELECT (ID,NAME) FROM kadai_table; とすると ERROR 1064: You have an error in your SQL syntax. Check the manual that corresp onds to your MySQL server version for the right syntax to use near 'NAME) FROM k adai_table' at line 1 とかえってきます。 3)のエラーの原因は構文の記述ミス・・・?と考えているのですがはっきりとしていません。 初歩的な問題なのでしょうが、googleなどで調べてみても思うようなエラーの原因が理解できません。 どなたか教えていただけないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • MySQLへのレコード追加

    VB6でMySQL4.1に接続して テーブル"table1"にレコードを追加したいんですけど MySQLには接続できるんですけど、新しいレコードを 追加できません。 エラーメッセージは  Unknown column 'ID'in'fieldlist' とでます。 教えてください。 Dim SQL As String Dim ID As Integer Dim name As String Dim cmd As ADODB.Command Set cmd = New ADODB.Command ID = Text1.Text name = Text2.Text SQL = "insert into table1(AID,Aname) values(ID,name) " cmd.ActiveConnection = cn cmd.CommandText = SQL cmd.Execute table1の内容は AID Aname ←フィールド名 -------------   1  suzuki 2 satou 3 takahasi みたいな感じです。

  • MySQLのUPDATE文でサブクエリ

    MySQLのUPDATE文でサブクエリの使い方について教えて下さい。 MySQLのUPDATE文でサブクエリを使うと「#1093 - You can't specify target table 'exam' for update in FROM clause 」というエラーになってしまいます。 「あるテーブルに対してデータを追加・更新する場合、同じテーブルをサブクエリーに使えない」 「サブクエリー内のFrom句はテンポラリテーブルとして扱うことが可能」 ということはわかりましたが、これに従いSQL文を変更してもうまくいきません。 どのようにSQL文を作ったら良いか教えていただければと思います。 環境 PHP:5.1.6 MySQL:5.0.77 ------具体的なSQL文--------------------------------------- テーブル名:sample カラム名:date(DATETIME型),name,flag 上記テーブルに対して、 1.社員(列名:nameのsuzuki)の最新出勤日(列名:date)のflagを1にする 2.社員(列名:nameのsuzuki)の最新出勤日以外(列名:date)のflagを2にする という処理をしたいと思います。 まず、SELECT文を作ってみました。 1.最新出勤日データを抽出 SELECT * FROM sample WHERE (date= (select max(date) from sample)) and name='sizili' 2.最新出勤日以外のデータを抽出 SELECT * FROM sample WHERE not (date= (SELECT max(date) FROM sample)) and name='suzuki' これをUPDATE文に変更すると、 #1093 - You can't specify target table 'exam' for update in FROM clause というエラーになります。 上記をUPDATE文に変更 1.最新出勤日データを抽出 UPDATE sample SET flag=1 WHERE (date= (select max(date) from sample)) and name='sizili' 2.最新出勤日以外のデータを抽出 UPDATE sample SET flag=2 WHERE not (date= (SELECT max(date) FROM sample)) and name='suzuki' エラー文を検索したところ下記のような情報を見つけることができました。 「仕事SPOT」 MySQLでサブクエリ(エラー#1093を回避する方法) http://wsjp.blogspot.com/2009/12/mysql1093.html 「あるテーブルに対してデータを追加・更新する場合、同じテーブルをサブクエリーに使えない」 「サブクエリー内のFrom句はテンポラリテーブルとして扱うことが可能」 と記載されています。 このページに掲載してあるように変更を加えてみました。 1.最新出勤日データを抽出 UPDATE sample SET flag=1 WHERE (date= (select max(date) as test_max from sample)) as text_tb and name='sizili' 2.最新出勤日以外のデータを抽出 UPDATE sample SET flag=2 WHERE not (date= (SELECT max(date) as test_max FROM sample)) as test_tb and name='suzuki' これでもエラーになってしまい、うまくいきません。

    • ベストアンサー
    • PHP

専門家に質問してみよう